当前位置: 代码迷 >> 综合 >> 标准库—— 关联容器 set、multimap、multiset
  详细解决方案

标准库—— 关联容器 set、multimap、multiset

热度:59   发布时间:2023-10-15 17:50:25.0

关于标准库中sring、char、vector、set、map、queue、stack、bitset等,方法有些记不清楚,每次用每次查,很费时间,干脆自己整理一下,记不住的时候,查询更方便。

关联容器:支持通过键来高效地查找和读取元素。包括:map,set,其中,map:键-值,set:键。
set 仅记录键,不记录值。无重复,键严格弱排序(从小到大,top小,back大)

set<T> tset;
tset.insert(key);  // 如果有,则不插入,否则,插入
tset.find(key); // 如果有,则返回1, 否则,返回0.  此方法,有时候不好用。
tset.count(key); // 如果有,则返回1, 否则,返回0. 这个方法更好用。
tset.insert(tvec.begin(), tvec.end());  // 将 vector<T> tvec中的数从 begin到end复制给 tset, 并且会去掉重复的数据。

set操作,同map操作相同。查看下面链接   https://blog.csdn.net/qq_34732729/article/details/100578977

multimap:允许一个键对应多个值。不支持下标操作,其他跟map操作相同

multiset:允许一个键对应多个值。

在multimap和multiset中 添加和删除

multimap<string, string> author;
author.insert(make_pair(string("Jone"), string("book1")));
author.insert(make_pair(string("Jone"), string("book2")));
multimap<string, string>::size_type cnt = authors.erase("Jone");    // 删除这个人的书,并返回删除的数量

在multimap和multiset中 查找元素

string search_author("Jone");        // 查找一个叫Jone的人
typedef multimap<string, string>::size_type sz_type;
sz_type en = author.count(search_author);    // 返回有多少条信息,关于这个Jone
multimap<string, string>::iterator iter = author.find(search_author);    // 返回Jone的迭代器
for(sz_type cnt = 0; cnt != en; ++cnt, ++iter)    // 都++
{cout << iter->second<<end;    // 输出作品
}

返回迭代器的关联容器操作

标准库—— 关联容器 set、multimap、multiset

typedef multimap<string, string>::iterator it;
it beg = author.lower_bound(search_author),end = author.upper_bound(search_author);
while(beg != end){cout << beg->second << endl;++beg;
}