unordered_set的find,count效率 和赋值

本文通过实际测试比较了C++中使用(dict.find(handle_str)!=dict.end())与(dict.count(stmp)>0)两种方法进行字典查找的效率,并发现前者效率更高。此外,还提到了unordered_set使用“=”时涉及的拷贝操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天发现

(dict.find(handle_str) != dict.end())

(dict.count(stmp) > 0)

效率要高不少,不到一倍。


而且unordered_set的 “=”用的是拷贝。。 才知道。

`unordered_map` `unordered_set` 都属于 C++ 标准库中的关联容器,它们基于哈希表实现,因此提供平均常数时间复杂度的查找、插入删除操作。 ### **unordered_map** - 它是一个键值对存储结构,类似于字典或映射。 - 每个元素由一个键(key)一个对应的值(value)组成。 - 键是唯一的,不能有重复的键。 - 常见操作包括: - 插入:通过 `insert()` 或直接赋值的方式添加新的键值对。 - 查找:使用下标运算符 (`[]`) 或者 `find()` 函数定位特定键的位置。 - 删除:通过 `erase()` 移除指定的键及其对应值。 **示例代码片段:** ```cpp #include <iostream> #include <unordered_map> int main() { std::unordered_map<std::string, int> map; map["one"] = 1; // 插入键值对 if (map.find("one") != map.end()) { // 判断是否存在并访问 std::cout << "Key 'one': " << map["one"] << '\n'; } } ``` --- ### **unordered_set** - 只存储唯一的关键字集合。 - 关键字本身即为其数据内容,并且不允许存在重复项。 - 主要用作快速检测某个值是否存在于集合内的情况。 **常见操作包括:** - 添加新成员到集合里去——可以用`emplace`, `insert`. - 测试某成员是否已经存在——可以采用`count`, `find`. **示例代码片段:** ```cpp #include <iostream> #include <unordered_set> int main(){ std::unordered_set<int> mySet{42,7,-5}; for(auto const& elem : mySet){ std::cout << elem << "\t"; // 输出所有元素 } bool exists=mySet.count(-5); //检查是否有-5这个数值 std::cout<<"\nExists? "<<exists;//打印结果 } ``` --- 两者都利用了内部散列机制来保证高效性能。然而,在实际应用当中需要特别留意冲突处理以及负载因子等因素可能带来的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值