std::multiset 是含有 Key 類型對象有序集的容器。不同於 set ,它允許多個關鍵擁有等價的值。用關鍵比較函數 Compare 進行排序。搜索、插入和移除操作擁有對數復雜度。
與set一樣地,它有一個 find 函數,但是當容器內有多個重復元素時,它返回的到底是哪一個元素呢?cppreference.com 上對於 find 函數的解釋是“返回值:指向鍵等於 key 的元素的迭代器。”,並沒有說明到底是哪個元素。
使用 Visual Studio 打開頭文件 set,找到對應的 find 函數,代碼如下(部分):
iterator find(const key_type& _Keyval)
{ // find an element in mutable sequence that matches _Keyval
iterator _Where = lower_bound(_Keyval);
return (_Where == end()
|| _DEBUG_LT_PRED(this->_Getcomp(),
_Keyval, this->_Key(_Where._Ptr))
? end() : _Where);
}
這里其實還看不出來,那只能實踐出真知了
經過多次實驗,find 函數返回的是等價的幾個元素中最先插入進容器的那個。這個結論同樣適用於G++編譯器。