前言:
vector list deque通常是使用数组或者链表的物理形式实现
关联容器通常是以树的形式实现,STL提供了4中关联容器:set multiset map multimap
1. set
set的key类型和val类型必须相同(否则编译失败),并且在一个容器中key是唯一的
// set::rbegin/rend
#include <iostream>
#include <set>
int main ()
{
int myints[] = {21,64,17,78,49};
std::set<int> myset (myints,myints+5);
std::set<int>::reverse_iterator rit;
std::cout << "myset contains:";
for (rit=myset.rbegin(); rit != myset.rend(); ++rit)
std::cout << ' ' << *rit;
std::cout << '\n';
return 0;
}
输出:myset contains: 78 64 49 21 17
// set::rbegin/rend
#include <iostream>
#include <set>
int main ()
{
int myints[] = {21,21,17,78,49};
std::set<int> myset (myints,myints+5);
std::set<int>::reverse_iterator rit;
std::cout << "myset contains:";
for (rit=myset.rbegin(); rit != myset.rend(); ++rit)
std::cout << ' ' << *rit;
std::cout << '\n';
return 0;
}
输出:
myset contains: 78 49 21 17
2. multiset
multiset 和 set的区别是 multiset的key可以重复
// multiset::begin/end
#include <iostream>
#include <set>
int main ()
{
int myints[] = {42,71,71,71,12};
std::multiset<int> mymultiset (myints,myints+5);
std::multiset<int>::iterator it;
std::cout << "mymultiset contains:";
for (std::multiset<int>::iterator it=mymultiset.begin(); it!=mymultiset.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
输出:
mymultiset contains: 12 42 71 71 71
3. map
map的key和val类型不同,并且key是唯一的!
// map::begin/end
#include <iostream>
#include <map>
int main ()
{
std::map<char,int> mymap;
mymap['b'] = 100;
mymap['a'] = 200;
mymap['c'] = 300;
// show content:
for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
std::cout << it->first << " => " << it->second << '\n';
return 0;
}
输出:
a => 200
b => 100
c => 300
// map::begin/end
#include <iostream>
#include <map>
int main ()
{
std::map<char,int> mymap;
mymap['b'] = 100;
mymap['a'] = 200;
mymap['b'] = 200;
// show content:
for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
std::cout << it->first << " => " << it->second << '\n';
return 0;
}
输出:
a => 200
b => 300
4. multimap
multimap和map不同点在于key可以重复
// multimap::begin/end
#include <iostream>
#include <map>
int main ()
{
std::multimap<char,int> mymultimap;
mymultimap.insert (std::pair<char,int>('a',10));
mymultimap.insert (std::pair<char,int>('b',20));
mymultimap.insert (std::pair<char,int>('b',150));
// show content:
for (std::multimap<char,int>::iterator it=mymultimap.begin(); it!=mymultimap.end(); ++it)
std::cout << (*it).first << " => " << (*it).second << '\n';
return 0;
}
5. 参考链接
转载01:
https://www.cnblogs.com/winslam/p/8975139.html
转载02:
https://www.cnblogs.com/LearningTheLoad/p/7466057.html
转载03:
http://www.cplusplus.com/reference/map/multimap/?kw=multimap