設置總是按排序順序插入元素,所以不應該告訴插入位置。爲什麼在STL中設置插入函數的位置參數
iterator insert (iterator position, const value_type& val);
那麼爲什麼有一個位置參數,它有用嗎?
設置總是按排序順序插入元素,所以不應該告訴插入位置。爲什麼在STL中設置插入函數的位置參數
iterator insert (iterator position, const value_type& val);
那麼爲什麼有一個位置參數,它有用嗎?
該參數將用作std::set::insert
的插入位置的提示,以便在指向正確位置時提高複雜性。
暗示 - 迭代到新的元件將被插入其之前(因爲C++ 11)
複雜
分期常量如果插入只是提示後發生在位置 的位置,對數在容器的大小 否則。
可能的情況之一是修改set
的元素(假設不會更改排序順序)。 std::set::iterator
是常量迭代器,這意味着您無法直接通過std::set::iterator
修改該元素。您可以(1)找到元素,(2)複製並修改副本,(3)從set
中刪除元素,(4)將副本作爲新值插入。在第四步中,您可以將第三步得到的迭代器作爲提示傳遞給std::set::insert
。
它被用作提示插入新元素的提示,也使得接口與其他容器兼容,即。 std::vector:insert
,這樣你可以使用std::inserter這個類型有T::insert
這樣的操作。
您也可以先用std::set::equal_range,如果兩個返回迭代優化刀片是平等就意味着元素沒有被發現和迭代器指向的地方,這個元素可以被插入:
std::set<int> s = {0,1,2,3,5,6,7};
auto r = s.equal_range(4);
if (r.first == r.second)
s.insert(r.first, 4);
的http:// EN。 cppreference.com/w/cpp/container/set/insert – juanchopanza