【发布时间】:2016-08-31 14:00:36
【问题描述】:
我有 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 个向量,我该如何提高效率?
【问题讨论】:
-
一对向量似乎是这里的方式。你只在结构上循环一次,你可以在排序中定义你想要排序的内容。
-
@Hayt 但要从对中提取名称和 ID 需要另一个循环
-
您尝试过使用
std::map<std::string, int>吗?我认为这可以解决您的问题。您可以为std::sortbtw 提供自定义比较功能;) -
如果您仅按字符串排序,则地图将起作用。但我假设您想在 ID 和名称排序之间切换?
-
@meetaig 也许
std::map<ID as int, then std::string>会好很多。由于 ID 与地图的键相同
标签: c++ performance optimization c++14