为什么 std::map 存储的元素少于预期?
Why the std::map storing fewer elements than expected?
为什么我的代码中的地图只存储两个元素而不是三个?
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>>
(未排序的键值对列表)等等,这样多个键应该不是问题。
Where am I going wrong?
考虑检查
if(v1[i] > v2[i])
你有两个迭代满足这个条件:
140, 229 // v1
82 , 216 // v2
前两个之间的差异(即v1[index] - v2[index]
)是58
,第二个是13
。
在第一次迭代中,地图插入 (1, 58)
。在第二次迭代中它应该有 (1, 13)
,但是从 std::map::insert
:
Inserts element(s) into the container, if the container doesn't
already contain an element with an equivalent key.
因此没有插入。
为什么我的代码中的地图只存储两个元素而不是三个?
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>>
(未排序的键值对列表)等等,这样多个键应该不是问题。
Where am I going wrong?
考虑检查
if(v1[i] > v2[i])
你有两个迭代满足这个条件:
140, 229 // v1
82 , 216 // v2
前两个之间的差异(即v1[index] - v2[index]
)是58
,第二个是13
。
在第一次迭代中,地图插入 (1, 58)
。在第二次迭代中它应该有 (1, 13)
,但是从 std::map::insert
:
Inserts element(s) into the container, if the container doesn't already contain an element with an equivalent key.
因此没有插入。