set 集合 基于平衡二叉树(红黑树)存储,元素值唯一且有序
multiset 多重集合 基于平衡二叉树(红黑树)存储,元素值可以重复
unordered_set 无序集合 基于哈希表 无序的,但是元素值唯一,使用时需要包含头文件
<unordered_set>
以上三个功能基本一致,只是内部实现有所不同
unordered_multiset 多重无序集合
如下一个程序演示set关联容器
#include <set> 需要包含该头文件
template <typename T>
void print(T Begin, T end)
{
for (T i = Begin; i != end; ++i)
{
std::cout << *i << std::endl;
}
std::cout << std::endl;
}
int main()
{
std::set<int> obj = {5,6444,54,84,452}; 创建一个set容器,元素在插入该容器时自动排列
for (auto i = obj.begin(); i != obj.end(); i++) 遍历该容器
{
std::cout << *i << std::endl; 打印元素值
}
结果发现,从小到大打印,证明容器元素是有序的
std::set<int> objB(obj.begin(), obj.end()); 迭代器方式拷贝构造
元素从obj容器的开始到结尾全部拷贝
objB.erase(84); 删除该容器中84的值
objB.erase(objB.begin());删除某个迭代器指向的位置
objB.erase(objB.begin(), objB.end()); 删除某个迭代器指向的位置到另一个迭代器指向的位置
objB.insert(999); 插入999
if (objB.insert(999).second) second用来判断插入元素后,该元素在容器中个数,如果为1则返
回ture,如果为2则返回false
{
std::cout << "insert success" << std::endl;
}
else
{
std::cout << "insert failed" << std::endl;
}
if (objB.find(12) != objB.end()) 遍历查找元素,如果返回false意味着容器元素都查找了一遍,没
有找到要查找的元素,查找失败
{
std::cout << "find success" << std::endl;
}
else
{
std::cout << "find failed" << std::endl;
}
for (auto i = objB.rbegin(); i != objB.rend(); i++) 反向遍历
{
std::cout << *i << std::endl;
}
print(objB.begin(),objB.end()); 可以应用模板函数遍历
system("pause");
return 0;
}