【问题标题】:Why the std::map storing fewer elements than expected?为什么 std::map 存储的元素少于预期?
【发布时间】:2021-07-27 15:57:45
【问题描述】:

为什么我的代码中的地图只存储两个元素而不是三个?

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)ideally。但它只存储(1,58) (2,7)。我检查了大小,它显示的是2

我哪里出错了?

【问题讨论】:

标签: c++ algorithm stdvector stdmap c++-standard-library


【解决方案1】:

首先,std::map是一个排序的关联容器,它只保留唯一的键。意思是,std::map 无法实现您的期望。

你应该考虑


我哪里出错了?

考虑检查

if(v1[i] > v2[i])

你有两个满足这个条件的迭代:

140, 229   // v1
82 , 216   // v2

前两个之间的差异(即v1[index] - v2[index])是58,第二个是13。 在第一次迭代中,使用(1, 58) 插入地图。在第二次迭代中它应该有(1, 13),但来自std::map::insert

将元素插入容器,如果容器没有 已包含具有等效键的元素

因此它没有被插入。

【讨论】:

    猜你喜欢
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 2010-12-05
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多