我有2个向量,用于存储“链接”的属性。这就是我的意思:
std::vector<std::string> names;
std::vector<int> ids;
// Name of object with an ID of 5
auto name = names[std::find(ids.begin(), ids.end(), 5) - ids.begin()];
每个对象都有一个名称和一个ID,因此索引 n 的对象的名称为name[n]
,ID为ids[n]
。
现在我想按字母顺序对名称进行排序。我可以使用std::sort
:
std::sort(names.begin(), names.end());
但现在ID不匹配了!我想做了一个对的向量,将每个名字/ id放入其中,对其进行排序,然后提取出数据。
这不是很有效,因为我必须在两个向量的每个元素上循环2次,并且向量有很多元素。
我怎样才能提高效率,看到我不能从头开始使用对矢量而不是2个矢量?
答案 0 :(得分:1)
你可以使用一个std :: map字符串来将名称映射到它们的索引(这是ids的索引),如果你想命令另外把另一个std :: map int映射到int来映射id到它们的索引(与名称索引相同)。
通过这种方式,您可以按原样保留数组,并且有两个有序的结构,可以快速为您提供访问数组所需的索引。