关联容器是STL容器的另一组成部分,关联容器的底层是红黑树,容器会根据值进行自动调整排序。
map与set的底层数据结构决定了他们不会有重复的元素,set.count()函数返回的结果只能整数 0 或 1,1表示有这个元素,0表示没有这个元素;
与其功能相似的还有函数find(),find()函数返回值是一个迭代器,成功返回迭代器指向所查找的元素,失败返回迭代器指向end
template<typename Container>
void Show(Container& con)
{
Container::iterator it = con.begin();
while (it != con.end())
{
std::cout << *it << " ";
it++;
}
std::cout << std::endl;
}
int main()
{
int arr1[] = { 5,6,78,36};
int arr2[] = { 1, 32, 11, 543, 12, 9, 8, 234, 23 };
int len1 = sizeof(arr1) / sizeof(arr1[0]);
int len2 = sizeof(arr2) / sizeof(arr2[0]);
std::set<int> myset(arr1, arr1 + len1); //插入arr1
Show(myset);
myset.insert(10); // 插入10
Show(myset);
myset.insert(arr2, arr2 + len2); // 插入arr2
Show(myset);
myset.erase(1);//删除1
Show(myset);
//set.find()函数的使用
std::set<int>::iterator fit = std::find(myset.begin(), myset.end(), 10);
std::set<int>::iterator fit1 = myset.find(23);//O(log2 n)
std::cout << *fit << std::endl;
std::cout << *fit1 << std::endl;
//set.count()函数的使用
int count = myset.count(11); //统计11
std::cout << count << std::endl;
myset.erase(11); //删除11后统计11
count = myset.count(11);
std::cout << count << std::endl;
return 0;
}
讲完了set就轮到map了,map是一个键值对,每个键都有一个值与之相对应。
int main()
{
std::map<int,int> mymap;
std::cout << typeid(std::map<int, int>::value_type).name() << std::endl; //map参数的类型
std::pair<int, int> p1(1, 11);
mymap.insert(p1);
mymap.insert(std::pair<int, int>(2, 22));
mymap[3] = 33;
std::map<int,int>::iterator it = mymap.begin();
while (it != mymap.end())
{
std::cout << it->first << " ==> " << it->second << std::endl;
it++;
}
std::map<int, int>::iterator fit = mymap.find(1);//基于key查询
return 0;
}