一、map
1、map被定义为一对(pair即key和value)数值。
key值在map内最多只有一份。
假如需要对一篇文章中的单词计数,那么就可以建立一个map,string类型的key,int型的value,表示某个单词出现的次数。
#include<map>
#include<string>
map<string,int> words;
输入key/value的方式如下:
words["hello"] = 1;
字数统计程序:
string word;
while(cin >> word)
{
words[word]++;
}
key和value对应于map对象内名为first和second的member。循环打印map内的key/value值时可以如下操作:
map<string,int>::iterator iter = words.begin();
for(;iter != words.end();iter++)
{
cout << "key:" << iter->first <<
"value:" << iter->second << endl;
}
2、查询map内是否存在某个key
//三种方法:
//No1
int count = 0;
if(!words["hello"])
//hello不存在
//No2
if(words.find("hello") == words.end())
//hello不存在
//No3
if(!words.count("hello"))
//hello不存在
第一种方法:如果“hello”不存在,那么会自动加入map中,key为“hello”,value为对应类型的默认值;
第二种方法:find函数为map对象的成员函数,不是泛型算法的函数。函数返回值为指向一个pair的迭代器,如果不存在则为end()。
第三种方法:count函数返回的为某个特定项目在map对象内的个数
二、set
1、set由一群key的组合而成,没有value。
set中的key也只有一份。
假如我们统计一篇文章中出现了哪些单词,而不必统计出现的次数,那么就可以用set容器来存储出现过得单词。
#include<set>
#include<string>
set<string> words;
向words中加入元素使用insert函数
words.insert(ival); //加入单一元素
words.insert(vec.begin(), vec.end()); //加入一个范围元素,vec为vector容器
查询某值是否在set中
words.count("hello"); //返回hello的份数