如何解决为什么 std::map 存储的元素少于预期?
为什么我的代码中的地图只存储了两个元素而不是三个?
vector<int> v1 = { 140,229,319 };
vector<int> v2 = { 82,216,326 };
map<int,int> mp;
for (int i = 0; i < v1.size(); i++)
{
if (v1[i] > v2[i])
{
mp.insert({ 1,v1[i] - v2[i] });
}
else if (v2[i] > v1[i])
{
mp.insert({ 2,v2[i] - v1[i] });
}
}
cout << mp.size() << endl;
for (auto it = mp.begin(); it != mp.end(); it++)
{
cout << it->first << " " << it->second << endl;
}
理想情况下,它应该存储:(1,58) (1,13) (2,7)
。但它只存储 (1,58) (2,7)
。我检查了尺寸,它显示 2
。
我哪里出错了?
解决方法
首先,std::map
是一个有序的关联容器,它只保留唯一的键。这意味着,使用 std::map
无法实现您的期望。
你应该考虑
-
std::multimap
(键值对排序列表), -
std::vector<std::pair<int,int>>
(未排序的键值对列表)等,因此多个键不应该成为问题。
我哪里出错了?
考虑检查
if(v1[i] > v2[i])
您有两次满足此条件的迭代:
140,229 // v1
82,216 // v2
前两个之间的差异(即 v1[index] - v2[index]
)是 58
,第二个是 13
。
在第一次迭代中,地图插入 (1,58)
。在第二次迭代中它应该有 (1,13)
,但来自 std::map::insert
:
将元素插入容器中,如果容器没有插入 已经包含具有等效键的元素。
因此它没有被插入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。