排序2个“链接”数组的更好方法是什么?

时间:2016-08-31 14:00:37

标签: c++ performance optimization c++14

我有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个矢量?

1 个答案:

答案 0 :(得分:1)

你可以使用一个std :: map字符串来将名称映射到它们的索引(这是ids的索引),如果你想命令另外把另一个std :: map int映射到int来映射id到它们的索引(与名称索引相同)。

通过这种方式,您可以按原样保留数组,并且有两个有序的结构,可以快速为您提供访问数组所需的索引。