linux和windows中stl map的一点差异

  最近在做一个项目,需要用到一个词典的小功能,由于暂时不需要考虑效率,我就使用了STL 的 map 容器,但在测试过程中发现 Windows 和 Linux 下存在不同的映射结果,其中  Windows 的结果跟自己设计的一样,而 Linux 却出现差错,debug 好久才发现如下问题:

  其中,Linux 平台下使用的编译器版本为 g++ 4.1.2,Windows 下使用 Visual Studio 2010 编译。

1 std::map<string, int> dict;
2 dict["china"] = dict.size();
3 printf("%d", dict.begin()->second);

  在 Windows 下的运行结果为 0,而在 Linux 下的运行结果为 1,从而可以推论两种编译器的赋值顺序是不一样的,写了这几年程序头一次发现这种问题,我不知道是编辑器版本的问题,还是 bug ,或者就是这么规定的,请了解的朋友告诉我一下,谢谢!
 
  总结:用 stl map 做赋值时还是老老实实用 insert 函数好,既保证效率,尤其 value 为类时,同时也比较安全。

linux和windows中stl map的一点差异》上有4条评论

  1. 应该是求值顺序的差异

    要保证平台无关,可以用:
    size_t size = dict.size();
    dict[“china”] = size;

发表评论

电子邮件地址不会被公开。 必填项已用*标注