网站生成软件免费制作,访问自己做的网站吗,天津建设工程信息网账号密码,cnnic可信网站必须做吗?关联容器总结
有序关联容器
键值的顺序自动排序#xff0c;键值必须支持 操作符
底层数据结构
使用平衡树#xff0c;比如#xff08;红黑树#xff09;增删查的平均时间复杂度接近 O(logn)
种类 std::set#xff1a;集合#xff0c;包含唯一的键元素。 std…关联容器总结
有序关联容器
键值的顺序自动排序键值必须支持 操作符
底层数据结构
使用平衡树比如红黑树增删查的平均时间复杂度接近 O(logn)
种类 std::set集合包含唯一的键元素。 std::multiset多重集合允许键重复。 std::map映射键值对键唯一值可以重复。 std::multimap多重映射允许键重复的键值对。
无序关联容器
底层数据结构
链式哈希增删查的平均时间复杂度接近O(1)
种类
std::unordered_set无序集合包含唯一的键元素。std::unordered_multiset无序多重集合允许键重复。std::unordered_map无序映射键唯一。std::unordered_multimap无序多重映射允许键重复。
方法 插入操作 insert()在容器中插入元素返回一个迭代器和一个布尔值表示插入是否成功。对于无序容器可以传入 hint 迭代器提升效率。 emplace()在容器中原地构造元素避免不必要的复制或移动操作。 删除操作 erase()根据键或迭代器删除元素。返回已删除元素的数量。 查找操作 find()返回一个指向指定键的迭代器若键不存在则返回 end()。
#include iostream
#include map
#include unordered_setint main() {// std::map 示例std::mapint, std::string m;// 插入元素m.insert(std::make_pair(1, one));m.emplace(2, two);m[3] three; // 使用下标操作符插入或更新元素// 查找元素auto it m.find(1);if (it ! m.end()) {std::cout Key 1 found with value: it-second std::endl; // 输出 one}else {std::cout Key 1 not found std::endl;}// 删除元素m.erase(2); // 删除键为 2 的元素std::cout After erase, size of map: m.size() std::endl;// 遍历元素std::cout Elements in map: std::endl;for (const auto kv : m) {std::cout kv.first kv.second std::endl;}// std::unordered_set 示例std::unordered_setint uset { 1, 2, 3 };// 插入元素uset.insert(4);// 查找元素if (uset.find(3) ! uset.end()) {std::cout Found 3 in unordered_set std::endl;}else {std::cout 3 not found in unordered_set std::endl;}// 删除元素uset.erase(1); // 删除元素 1std::cout After erase, size of unordered_set: uset.size() std::endl;// 遍历元素std::cout Elements in unordered_set: std::endl;for (const auto elem : uset) {std::cout elem ;}std::cout std::endl;return 0;
}
注vector中push_back与emplace_back的区别
push_back会调用拷贝构造函数emplace_back会调用构造函数原地构造对象