阿里云网站建设如何,seo推广seo技术培训,免费下载app软件的网站,asp网站模版安装当我们处理数据时#xff0c;有时需要使用一些高效的数据结构来存储和管理元素。在C中#xff0c;我们有许多与此相关的容器类#xff0c;如 树型结构:set#xff0c;map#xff0c;multiset#xff0c;multimap; 哈希结构: unordered_set和unordered_map。这些容器提供了…当我们处理数据时有时需要使用一些高效的数据结构来存储和管理元素。在C中我们有许多与此相关的容器类如 树型结构:setmapmultisetmultimap; 哈希结构: unordered_set和unordered_map。这些容器提供了不同的特性和适用性下面我们将逐个介绍它们。 文章目录 1. set2. map3. multiset4. multimap5. unordered_set6. unordered_map总结 1. set
set是一个有序的容器它只包含唯一的元素。当我们需要存储一组元素并确保没有重复值时set是一个很好的选择。它基于红黑树实现因此插入、删除和查找操作的时间复杂度都是O(log n)。set的元素按升序排列。
#include iostream
#include set
using namespace std;int main() {// 创建一个set容器setint mySet;// 插入元素mySet.insert(10);mySet.insert(20);mySet.insert(30);// 查找元素int key 20;auto it mySet.find(key);if (it ! mySet.end()) {cout key is found in the set. endl; // 20 is found in the set.}else {cout key is not found in the set. endl; }// 删除元素mySet.erase(20);// 修改元素set不支持直接修改元素值需要先删除再插入mySet.erase(10);mySet.insert(100);// 遍历输出set中的元素cout Set contains:;for (const auto elem : mySet) {cout elem;}cout std::endl; // Set contains : 30 100return 0;
}对于set可以在声明时传入自定义的比较函数或函数对象来指定元素的排序规则。例如
struct CustomCompare {bool operator() (int a, int b) const {// 自定义排序规则这里以元素大小作为排序依据return a b;}
};std::setint, CustomCompare mySet;2. map
map是一个关联容器它包含键值对(key-value)。每个键对应一个唯一的值即每个键在map中是唯一的。map也是基于红黑树实现的因此插入、删除和查找操作的时间复杂度都是O(log n)。
#include iostream
#include map
using namespace std;int main() {// 创建一个map容器键为string类型值为int类型mapstring, int myMap;// 插入键值对myMap[apple] 5;myMap[banana] 10;myMap[cherry] 15;// 查找元素string key banana;auto it myMap.find(key);if (it ! myMap.end()) {cout key is found in the map with value: it-second endl;// banana is found in the map with value : 10}else {std::cout key is not found in the map. std::endl;}// 删除元素myMap.erase(banana);// 修改元素myMap[cherry] 20;// 遍历输出map中的键值对cout Map contains:;for (const auto pair : myMap) {cout ( pair.first , pair.second );}cout endl; // Map contains : (apple, 5) (cherry, 20)return 0;
}对于map同样可以使用自定义的比较函数或函数对象来定义键的排序规则。例如
struct CustomCompare {bool operator() (const std::string a, const std::string b) const {// 自定义排序规则这里以字符串长度作为排序依据return a.length() b.length();}
};std::mapstd::string, int, CustomCompare myMap;3. multiset
multiset是一个有序的容器它允许存储多个相同的元素。与set不同multiset可以包含重复值。它也是基于红黑树实现的因此插入、删除和查找操作的时间复杂度都是O(log n)。multiset的元素按升序排列。
4. multimap
multimap是一个关联容器它允许存储多个相同的键值对。与map不同multimap可以包含重复的键。它也是基于红黑树实现的因此插入、删除和查找操作的时间复杂度都是O(log n)。
5. unordered_set
unordered_set是一个无序的容器它包含唯一的元素。与set类似unordered_set也用于存储一组唯一的值但它使用哈希表来实现因此插入、删除和查找操作的平均时间复杂度是O(1)。元素在容器中的位置并不固定。
6. unordered_map
unordered_map是一个关联容器它包含键值对(key-value)。与map类似unordered_map也用于存储键值对但它使用哈希表来实现因此插入、删除和查找操作的平均时间复杂度是O(1)。元素在容器中的位置并不固定。
总结
综上所述选择使用哪种容器取决于具体的需求。如果需要有序性和快速查找可以选择set和map如果需要快速查找且不需要有序性可以选择unordered_set和unordered_map如果需要允许重复元素或键可以选择multiset和multimap