gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:43:11 24 4
gpt4 key购买 nike

我有一个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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com