目录
set和map是常见的关联式容器。
Set的常用的接口是:
insert
三种常见用法:
pair<iterator,bool> insert (const value_type& val);
iterator insert (iterator position, const value_type& val);
template <class InputIterator> void insert (InputIterator first, InputIterator last);
举个例子:
1.
set<int> s;
s.insert(1);
s.insert(2);
s.insert(3);
2.
auto ret = s.insert(2); ret是一个pair<iterator,bool>类型,
iterator的位置是,如果这个值已经存在了,则bool为false,
s.insert(ret.first, 4);
s.insert(ret.first, 5);
3.
int myints[] = { 20,30,10 };
vector<int> v = { 50,60,70 };
s.insert(myints, myints + 3); 通过区间插入
s.insert(v.begin(), v.end());
for (auto e : s)
{
cout << e << endl;
}
erase
三种常见用法:
void erase (iterator position);
size_type erase (const value_type& val);
void erase (iterator first, iterator last);
1.
auto e = s.begin();
e++;
s.erase(e);
2.
s.erase(3);
s.erase(2);
3.
s.erase(s.begin(), s.end()--);
for (auto e : s)
{
cout << e << endl;
}
如果是通过值删除,如果这个值不存在,则返回0,否则返回1.
find
iterator find (const value_type& val) const;
如果能够找到,则返回当前值的迭代器,否则返回end()。
count
size_type count (const value_type& val) const;
如果能够找到这个值,则返回1,否则返回0.
Map的常见接口:
构造函数
map<string, int> dict = { {"草莓",1},{"香蕉",2},{"橘子",3}};
map<string, int> dict1(dict.begin(), dict.end());
操作符 [ ] 是map特有的,set不具有[ ]功能。
mapped_type& operator[] (const key_type& k);
[]是可以理解为获得元素的second。
举个例子:
map<string, int> dict = { {"草莓",1},{"香蕉",2},{"橘子",3}};
cout << "草莓: "<<dict["草莓"] << endl;
[ ]用于计数是十分方便的。
map<string, int> dict;
string arr[] = { "草莓","草莓","香蕉","香蕉" };
for (auto e : arr)
{
dict[e]++; dict[e] 可以直接指向其second的值
}
for (auto e : dict)
{
cout << e.first << ":" << e.second << endl;
}
Insert
pair<iterator,bool> insert (const value_type& val);
直接插入某个值.
void insert (InputIterator first, InputIterator last);
通过迭代器插入
iterator insert (iterator position, const value_type& val);
在指定迭代器位置插入
map<string, int> dict;
1.
dict.insert(make_pair("hello",1));
map<string, int> dict1;
2.
dict1.insert(dict.begin(), dict.end());
3.
dict1.insert(dict1.begin()++, make_pair("hello", 1));
Erase
void erase (iterator position);
删除指定迭代器的值
size_type erase (const key_type& k);
删除指定的值
void erase (iterator first, iterator last);
删除迭代器区间的值
举个例子:
map<string, int> dict;
string arr[] = { "草莓","草莓","香蕉","香蕉" };
for (auto e : arr)
{
dict[e]++;
}
1.
dict.erase(dict.begin());
2.
cout << dict.erase("草莓") << endl;
如果值能够成功删除,则返回1,否则返回0
cout << dict.erase("柚子") << endl;
3.
dict.erase(dict.begin(), dict.end());
Find
iterator find (const key_type& k);
const_iterator find (const key_type& k) const;
其返回的迭代器的解引用是 一个pair<>类型的。
如果能够找到其值,则返回这个值的迭代器。
如果不能找到则返回 end
map<string, int> dict;
string arr[] = { "草莓","草莓","香蕉","香蕉" };
for (auto e : arr)
{
dict[e]++;
}
auto e = dict.find("香蕉");
cout<<(*e).first;
Count
size_type count (const key_type& k) const;
由于set和map都有去重的功能,所以count功能只能用于检测 k是否存在