关联容器中元素按照关键字来访问和保存
map key-value对(字典中单词是key,单词释义是value)——关联数组,
set 只保存关键字
multimap
multiset 允许多个元素具有相同的关键字
map
map<key类型,value类型>
map<string, size_t> words;
string word;
while (cin >> word)
{
++words[word];//word类似数组的下标
}
for (auto &s : words)
{
cout << s.first << "occurs" << s.second << endl;
//first保存关键字,second保存值。是pair类的数据成员
}
set
set<key类型>
map<string, size_t> words;
set<string> exclude = { "i", "a", "is" };
string word;
while (cin >> word)
{
if (exclude.find(word) == exclude.end())
//find()调用返回指向该关键字的迭代器,或者没找到返回尾后迭代器
++words[word];
}
for (auto &s : words)
{
cout << s.first << "occurs" << s.second << endl;
}
//11.4
#include<iostream>
#include<map>
#include<string>
#include<set>
using namespace std;
int main()
{
map<string, size_t> words;
set<string> exclude = { "i", "a", "is" };
string word;
int index = ;
while (cin >> word)
{
for (auto &s : word)
{
s=tolower(s);
if (ispunct(s))
{
s = '\0';//这里还是不对、、、??????
}
}
if (exclude.find(word) == exclude.end())
++words[word];
}
for (auto &s : words)
{
cout << s.first << "occurs" << s.second << endl;
}
return ;
}
定义关联容器
map<string, size_t> words;
map<string,string> name={{"af","advs",
{"dsvsfda","fsa"}};
//{key,value}构成一个元素
set<string> exclude = { "i", "a", "is" };
//11.7
#include<iostream>
#include<string>
#include<map>
#include<vector>
using namespace std;
int main()
{
map<string, vector<string>> familys = {
{ "shen", {"hongwei","faf"} }
};
string xingshi;
string name1, name2;
while (cin >> xingshi)
{
cin >> name1;
cin >> name2;
familys[xingshi].push_back(name1);
familys[xingshi].push_back(name2);
}
for (auto &s : familys)
{
vector<string> name;
name = s.second;
for (auto &c : name)
cout << s.first << " " << c << " " << endl;
}
return ;
}