set/mulitiset 容器(续一)
count函数(返回当前查找数字的数量)
gg是multiset容器,返回100的数量可能是0,1以外的数字;s1是set容器,返回的100的数量只能是0或者1
cout << gg.count(100) << " " << s1.count(100) << endl;
find函数
查找100,若找到返回其迭代器,若未找到返回end()(set和multiset都可以用)
auto pos = gg.find(100);
for (auto it = pos; it != gg.end(); it++)
cout << *it << " ";
clear函数
s.clear();
遍历set容器
for (auto g1 : gg) {//set和multiset两者方式都可以
cout << g1 << " ";
}
cout << endl;
for (set<char>::iterator it = s.begin(); it != s.end(); it++) {
cout << *it << " ";
}
cout << endl;
set按指定大小顺序排列
按照从大到小排列
...
class compare{
public:
bool operator()(int v1,int v2)const
{
return v1>v2;
}
}
...
int main(){
...
set<int,compare> s;
...
}
map/multimap容器
使用前,要先包括#include<map>头文件,map是无序的
创建map/multimap容器(使用insert函数)
map<string, int> s;
s.insert(pair<string, int>("aa", 10));
s.insert(make_pair("bb", 20));
s.insert(map<string, int>::value_type("cc", 30));
s["dd"] = 9;
索引可以通过s[key]直接索引key对应的内容
cout << s["aa"] << " " << s["bb"] <<" "<<s["cc"] <<" "<< s["dd"] << endl;
swap函数
s.swap(s1);//交换s和s1中容器的值
遍历容器(无序)每次输出都不一样(first输出key,second输出内容)
方法一:
for (auto sss : s) {
cout << sss.first <<" "<< sss.second << " ";
}
方法2:
for (map<string, int>::iterator it = s.begin(); it != s.end(); it++) {
cout << (*it).first << " " << (*it).second << " ";
}
cout << endl;
erase函数(删除)
s.erase(s.begin(), s.end());//删除区间
s.erase(s.begin());//删除开头指针指向地址的内容
s.erase("hh");//通过关键字删除值
count函数(统计个数)
cout << s.count("ll")<< endl;//统计key"ll"出现的次数。
总结
deque(双端队列)和list(双端列表)可以双端插入push_front,push_back,vector只能一端插入push_back
queue(队列,先进先出)一端进,另一端出 和stack(栈,先进后出)同一端进出 push
set/multiset,map/multiset 无序,但会自动排序,set和map去重,multiset和multimap不去重 insert