来源:unordered_set - C++ Reference (cplusplus.com)
四、element lookup
2.count
size_type count ( const key_type& k ) const;
搜索容器中值为k的元素个数。
由于unorder_set 中不允许重复的元素,因此返回值只要1(k元素存在)或0(k元素不存在)。
五、Modifiers
1.emplace
template <class... Args> pair <iterator,bool> emplace ( Args&&... args );
插入。与insert方法类似。
由于unorder_set的唯一性,只能插入容器中没有的元素。
插入后元容器size+1。
// unordered_set::emplace
#include <iostream>
#include <string>
#include <unordered_set>
int main ()
{
std::unordered_set<std::string> myset;
myset.emplace ("potatoes");
myset.emplace ("milk");
myset.emplace ("flour");
std::cout << "myset contains:";
for (const std::string& x: myset) std::cout << " " << x;
std::cout << std::endl;
return 0;
}
运行结果:
myset contains: flour milk potatoes
2.insert
(1) | pair<iterator,bool> insert ( const value_type& val ); |
---|---|
(2) | pair<iterator,bool> insert ( value_type&& val ); |
(3) | iterator insert ( const_iterator hint, const value_type& val ); |
(4) | iterator insert ( const_iterator hint, value_type&& val ); |
(5) | template <class InputIterator> void insert ( InputIterator first, InputIterator last ); |
(6) | void insert ( initializer_list<value_type> il ); |
// unordered_set::insert
#include <iostream>
#include <string>
#include <array>
#include <unordered_set>
int main ()
{
std::unordered_set<std::string> myset = {"yellow","green","blue"};
std::array<std::string,2> myarray = {"black","white"};
std::string mystring = "red";
myset.insert (mystring); // copy insertion
myset.insert (mystring+"dish"); // move insertion
myset.insert (myarray.begin(), myarray.end()); // range insertion
myset.insert ( {"purple","orange"} ); // initializer list insertion
std::cout << "myset contains:";
for (const std::string& x: myset) std::cout << " " << x;
std::cout << std::endl;
return 0;
}
运行结果:
myset contains: orange purple white black reddish yellow green blue red
3.erase
by position (1) | iterator erase ( const_iterator position ); |
---|---|
by key (2) | size_type erase ( const key_type& k ); |
range (3) | iterator erase ( const_iterator first, const_iterator last ); |
删除元素
按迭代器(位置)删除
按值k删除
按范围删除:注意范围[first,last),前包后不包
// unordered_set::erase
#include <iostream>
#include <string>
#include <unordered_set>
int main ()
{
std::unordered_set<std::string> myset =
{"USA","Canada","France","UK","Japan","Germany","Italy"};
myset.erase ( myset.begin() ); // erasing by iterator
myset.erase ( "France" ); // erasing by key
myset.erase ( myset.find("Japan"), myset.end() ); // erasing by range
std::cout << "myset contains:";
for ( const std::string& x: myset ) std::cout << " " << x;
std::cout << std::endl;
return 0;
}
运行结果:
myset contains: Canada UK Italy
4.clear
void clear() noexcept;
清除容器中所有元素。
容器size为0。