C++ 按数值对 tuple<string, float> vector 进行排序,然后按字典顺序排序

标签 c++ sorting vector tuples

我有一个vector<tuple<string, float> >存储两个节点之间的欧氏距离和节点名称的 vector 。我需要首先按距离值对该 vector 进行排序,然后按字符串值排序。在两个节点具有相同欧几里德距离的情况下,它们的排序位置解析为按节点名称的字母(字典顺序)顺序完成。目前,我有一个自定义排序辅助函数,它首先按浮点值对 vector 进行排序。

bool sort_second(const tuple<string, float>& a, const tuple<string, float>& b) { 
    return (get<1>(a) < get<1>(b)); 
} 

并调用sort(vec.begin(), vec.end(), sort_second)像这样。但如果节点foobar具有相同的距离,有可能 foo之前 bar即使bar应该是第一。我将如何对 vector 进行第二次排序(或者更好的是,在第一次通过时),这样我就不会弄乱我已经计算的值顺序?谢谢

最佳答案

使用std::tie像元组颠倒一样排序:

bool sort_reversed(const tuple<string, float>& a, const tuple<string, float>& b)
{ 
    return std::tie(get<1>(a), get<0>(a)) < std::tie(get<1>(b), get<0>(b)); 
} 

或者如果您希望手动完成:

bool sort_second(const tuple<string, float>& a, const tuple<string, float>& b)
{ 
    return (get<1>(a) < get<1>(b)) || 
           ((get<1>(a) == get<1>(b)) && (get<0>(a) < get<0>(b))); 
} 

关于C++ 按数值对 tuple<string, float> vector 进行排序,然后按字典顺序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58909338/

相关文章:

c++ - #pragma omp parallel 和 #pragma omp parallel for 之间的区别

c++ - 星号不是字符常量?

c# - 在 SerialPort 上设置 DTR、RTS、CTS、DSR 和 Xonn/Xoff

sorting - org.primefaces.model.BeanPropertyComparator.compare 处的 java.lang.NullPointerException

php - 如何从php中的另一个键排序和更新唯一键

android - 如何在android中对日期和空日期进行排序?

c++ - 成员值是否在构造函数初始化列表执行之前初始化?

C++:vector 中的 shared_ptr 没有更新原始的 shared_ptr

c++ - 如何将整数输入为空的vector <int>?

Python 和 scikit 学习 : replace matrix vector product during training with custom call