【问题标题】:why the c++ map changes the content position?为什么 c++ 地图会改变内容位置?
【发布时间】:2021-07-30 11:36:25
【问题描述】:

我试图了解为什么地图将第一个元素位置更改为第四个。当我打印地图时,第一个添加的位置转到第四个。

#include <stdio.h>
#include <stdlib.h>
#include <map>
#include <iostream>
typedef std::map<double, unsigned int> A;


double fRand(double fMin, double fMax)
{
    double f = (double)rand() / RAND_MAX;
    return fMin + f * (fMax - fMin);
}

这里是主要功能:

int main ()
{
int i, number;
double c;
number = 5;
 A a;

for( i = 0 ; i < number ; i++ )
{
 c = fRand(1, 9);
 a[c];   
std::cout << c<<"\n";
}

for(std::map<double, unsigned int>::const_iterator it = a.begin();
    it != a.end(); ++it)
{
    std::cout << it->first << " ->  "<<  it->second <<"\n";
}
return(0);
}

答案:第一个元素到了第四个位置

**7.7215**       first                                                                                                                                       
4.15506                                                                                                                                             
7.26479                                                                                                                                             
7.38752                                                                                                                                             
8.29318                                                                                                                            
4.15506 ->  0                                                                                                                                       
7.26479 ->  0                                                                                                                                       
7.38752 ->  0                                                                                                                                       
**7.7215 ->  0**    fourth                                                                                                                                    
8.29318 ->  0  

【问题讨论】:

  • 在调试的痛苦中很容易忽略一些事情,但请注意地图的输出中的键是按数字递增的顺序排列的。这不是巧合。

标签: c++ algorithm


【解决方案1】:

std::map 确实根据键 &lt; 或自定义比较器管理元素的顺序。这实际上是std::map 的主要特征。如果您不希望这样,请不要使用std::map。如果你想保持元素的插入顺序,你可以使用 std::vector&lt; std::pair&lt; double, unsigned int&gt;&gt; 代替。请注意您从不同容器中获得的不同复杂性保证,例如插入、查找、迭代、删除等。

【讨论】:

    【解决方案2】:

    std::map 按键的顺序存储元素。碰巧你生成的数字几乎是升序的。

    【讨论】:

      猜你喜欢
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 2020-12-01
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多