我正在尝试获取列表中字符串的排序位置 可能包含重复项。
我不在乎重复的不确定顺序,但我想进行全局排序。
这是迄今为止我最好的尝试:
Elsa,Chris,Ken,Tenta
还有另一种获取预期输出的方法吗?
编辑:
我缺少严格的比较+'inverseIndexes'部分来解决我的问题。这是更新的代码:
#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
void display(const std::vector<int> &array)
{
for (const auto & value : array)
std::cout << value << " ";
std::cout << std::endl;
}
std::vector<int> sortIndexes(const std::vector<std::string> &values)
{
std::vector<int> indexes(values.size());
std::iota(indexes.begin(), indexes.end(), 0);
std::stable_sort(indexes.begin(), indexes.end(), [&values](const size_t first, const size_t second)
{
return values.at(first) <= values.at(second);
});
return indexes;
}
int main (void)
{
display(sortIndexes({"b", "a", "c"})); // Expecting: 1 0 2 Result: 1 0 2
display(sortIndexes({"c", "c", "a"})); // Expecting: 1 2 0 or 2 1 0 Result: 2 1 0
display(sortIndexes({"c", "a", "c"})); // Expecting: 1 0 2 or 2 0 1 Result: 1 2 0
return 0;
}
答案 0 :(得分:0)
std::stable_sort
的比较函数应为严格的“小于”,而不是“小于或等于”。因此,您只需要解决以下问题:
return values.at(first) < values.at(second);