【发布时间】:2019-04-25 22:32:01
【问题描述】:
问题:我需要按特定顺序对字符串向量进行排序。假设我们有一个常数向量或一个具有确切顺序的数组:
vector<string> correctOrder = {"Item3", "Item1", "Item5", "Item4", "Item2"};
接下来,我们有一个动态的传入向量,它将具有相同的项目,但它们可能混合在一起并且数量更少。
vector<string> incommingVector = {"Item1", "Item5", "Item3"};
所以我需要像第一个向量correctOrder一样的顺序对incomming向量进行排序,结果一定是:
vector<string> sortedVector = {"Item3", "Item1", "Item5"};
我认为正确的顺序可能以不同的方式表示,但无法弄清楚。 有人可以帮帮我吗?
【问题讨论】:
-
使用
std::sort进行实际排序是一个好的开始。我还建议阅读 lambda expressions 以提供自定义比较函数,您可以将其传递给std::sort使用。 -
@gsamaras 也许吧。或者,也许 OP 想要使用向量
correctOrder中的元素来获取元素的相对位置?我不知道,从这个问题上看不太清楚。 -
这是正确的 gsamaras。我需要相对于第一个向量进行排序。
-
我看到所有的答案都是离线的。有没有更高效的在线算法?
-
虽然所有答案都告诉你如何在 O(N * M log M) 中解决,但你可以通过使用堆在 O(log N * M log M) 中实现这一点,因为它们只需要记录 N 次插入。请注意,无法查找中间的值,因为那样您将不得不花费 M 时间。
标签: c++ string algorithm sorting vector