Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;:数字ID的映射迭代排序-交叉编译器_C++_Performance_Sorting_Map_Stl - Fatal编程技术网

C++ c++;:数字ID的映射迭代排序-交叉编译器

C++ c++;:数字ID的映射迭代排序-交叉编译器,c++,performance,sorting,map,stl,C++,Performance,Sorting,Map,Stl,快速问题: 使用数字ID和STL映射,C++将始终按照数字ID的顺序迭代对吗?这会根据编译器的不同而变化吗?还是STL规范保证了这一点 例如: #include <iostream> #include <map> #include <string> int main(int argc, char **argv) { std::map<int, std::string> testmap; testmap.insert(std::m

快速问题: 使用数字ID和STL映射,C++将始终按照数字ID的顺序迭代对吗?这会根据编译器的不同而变化吗?还是STL规范保证了这一点

例如:

#include <iostream>
#include <map>
#include <string>

int main(int argc, char **argv)
{
    std::map<int, std::string> testmap;

    testmap.insert(std::map<int, std::string>::value_type(0, "bob"));
    testmap.insert(std::map<int, std::string>::value_type(1, "jean"));
    testmap.insert(std::map<int, std::string>::value_type(2, "melissa"));
    testmap.insert(std::map<int, std::string>::value_type(3, "george"));
    testmap.insert(std::map<int, std::string>::value_type(4, "dave"));
    testmap.insert(std::map<int, std::string>::value_type(5, "sally"));
    testmap.insert(std::map<int, std::string>::value_type(6, "jessica"));
    testmap.insert(std::map<int, std::string>::value_type(7, "sandy"));
    testmap.insert(std::map<int, std::string>::value_type(8, "winston"));
    testmap.insert(std::map<int, std::string>::value_type(9, "pete"));
    testmap.insert(std::map<int, std::string>::value_type(10, "maxx"));

    for (std::map<int, std::string>::iterator map_item = testmap.begin(); map_item != testmap.end(); map_item++)
    {
        std::cout << map_item->second << std::endl;
    }

    std::cin.get();

    return 0;
}
#包括
#包括
#包括
int main(int argc,字符**argv)
{
std::map testmap;
insert(std::map::value_type(0,“bob”);
insert(std::map::value_type(1,“jean”);
insert(std::map::value_type(2,“melissa”);
insert(std::map::value_type(3,“george”);
insert(std::map::value_type(4,“dave”);
insert(std::map::value_type(5,“sally”);
insert(std::map::value_type(6,“jessica”);
insert(std::map::value_type(7,“sandy”);
insert(std::map::value_type(8,“winston”);
insert(std::map::value_type(9,“pete”);
insert(std::map::value_type(10,“maxx”);
对于(std::map::iterator map_item=testmap.begin();map_item!=testmap.end();map_item++)
{

std::cout second您正在使用映射将线性索引存储为键。只需使用
向量
数组
。您不必担心
映射
存储项的顺序,它总是以最有效的方式来执行,您不必对此进行任何假设

也可以按如下方式插入到地图:

testmap[0] = "bob";
testmap.insert(std::make_pair(1, "bob"));
或者像这样:

testmap[0] = "bob";
testmap.insert(std::make_pair(1, "bob"));

您正在使用映射将线性索引存储为键。只需使用
向量
数组
。您不必担心
映射
存储项目的顺序,它总是以最有效的方式来执行,您不必对此进行任何假设

也可以按如下方式插入到地图:

testmap[0] = "bob";
testmap.insert(std::make_pair(1, "bob"));
或者像这样:

testmap[0] = "bob";
testmap.insert(std::make_pair(1, "bob"));
  • 是的,顺序是相同的。std::map使用键的顺序来存储数据(在C++11中,有无序的_-map,它忽略顺序),因此当您在它上面迭代时,较小的会优先
  • 对于这样小的数据集,数组(或向量,或列表)将比映射快得多
  • [编辑:除非映射的元素较少(基准)。根据存在的元素数量,程序在映射上的迭代速度可能比数组快得多。]

  • 是的,顺序是相同的。std::map使用键的顺序来存储数据(在C++11中,有无序的_-map,它忽略顺序),因此当您在它上面迭代时,较小的会优先
  • 对于这样小的数据集,数组(或向量,或列表)将比映射快得多

  • [编辑:除非映射的元素较少(基准)。根据存在的元素数量,程序在映射上的迭代速度可能比数组快得多。]

    在这种情况下,它将是一个数组,因为向量迭代器太容易失效。请参阅以下内容,了解您建议的上述插入性能较差的原因:另外,您没有回答我的任何一个问题,请不要假设您知道我问这些问题的原因。如果我解释了这些问题,问题就解决了会更长,没有目的。不要走得太远。你没有回答这个问题,你可能从我的评论中学到了一些东西。再见。在这种情况下,它将是一个数组,因为向量迭代器太容易失效。请参阅以下内容,了解你建议的上述插入是错误的原因另外,你没有回答我的任何一个问题,请不要以为你知道我问这些问题的原因。如果我解释了,这个问题会很长,而且没有目的。不要走得太远。你没有回答问题,你可能从我的评论中学到了一些东西。再见。