在C 工作中插入Unordered_map中的插入如何
How does insertion in an unordered_map in C++ work?
int main()
{
auto n=0, sockNumber=0, pairs=0;
unordered_map<int, int> numberOfPairs;
cin >> n;
for(int i=0; i<n; ++i)
{
cin >> sockNumber;
numberOfPairs.insert({sockNumber, 0}); // >>>>>> HERE <<<<<<
numberOfPairs.at(sockNumber) += 1;
if(numberOfPairs.at(sockNumber) % 2 == 0)
{
pairs += 1;
}
}
cout << pairs;
return 0;
}
此代码计算给定输入中的对数并打印。我想知道 insert unordered_map 的方法。每当我看到一个数字时,我都将其插入一个值" 0"。
插入方法再次看到相同的数字时会跳过值'0'?它是如何工作的?
输入 -
9
10 20 20 10 10 30 50 10 20
输出 -
3
-
插入方法跳过时插入值'0' 再次相同的数字?
是的。
来自 cpp.reference.com unordered_map:
无序地图是一个包含键值的关联容器 与对唯一键对。搜索,插入和去除元素 具有平均恒定时间复杂性。
和 cpp.reference.com unordered_map :: insert:
如果容器不 已经包含带有等效键的元素。
-
它如何工作?
我想某些工作原则在很大程度上取决于特定的 stl 实现。
基本上 unordered_map 是作为哈希表实现的,其中元素被组织到与同一哈希相对应的桶中。当您尝试插入键值 Pair 键 hash时。如果哈希表中没有这样的哈希,或者在与计算哈希相对应的桶中没有这样的键值对,则将新对插入 unordered_map 。
unordered_map不允许键重复,因此,如果您尝试使用.insert()方法插入相同的密钥,则会失败并跳过该操作。但是,如果您使用unorderedmap [key] = value插入重复键,则不会跳过,而是将匹配键的值更新到新值。
std :: unordered_map保存独特的键作为值。如果要继续插入相同的密钥,请使用std :: unordered_multimap。
另外,您应该意识到std :: unordered_map :: insert返回的值表示插入是否成功。
if ( !numberOfPairs.insert({sockNumber, 0}).second )
{
// insertion didn't work
}
您可以使用以上内容确认未插入该项目,因为地图中已经存在相同的密钥。
- 将重物插入std::map
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- 找不到最新插入到 std::map 中的键
- 在 std::map 中插入数组元素
- 插入 std::set 作为 std::map 的键
- 通过构造函数插入 std::map
- 将带有模板的自定义类插入到 std::map 中
- std::map 索引运算符与插入方法的性能
- 尝试在 std::map 中插入抽象类时没有用于调用的匹配函数
- 如何在声明时将对象插入 std::map
- 如何在 std::map<const int、int> C++ 中重载插入运算符>>?
- 在 std::map 中插入对象时构造函数中变量的地址
- 在这种情况下,插入 std::map 可能会失败?
- 从元组向 std::map 插入值
- 如何在 C++11 中插入 std::map?
- std::map::emplace无法解决,但插入右值有效 - 为什么?
- C++ 堆栈中的类对象作为 Map 的值插入
- 查找并插入-STD :: MAP C
- 将项目插入到std :: map时错误
- 将列表初始化的对插入到 std::map 中