C ++对元素与排序列表/映射中的订单进行排序和关联

时间:2015-07-28 00:45:34

标签: c++ sorting

我有一些从数据库获取到C ++的键值对。我正在考虑将它们存储在地图容器中并使用sort()对它们进行排序。我需要每对的顺序(No.1,No.10等)。我刚刚意识到sort()只会以DESC / ASC顺序返回一个向量,但不会给出每个元素的特定顺序。我应该如何编写程序来获取元素的顺序?谢谢

INPUT

Input

输出

enter image description here

2 个答案:

答案 0 :(得分:1)

我建议您将所有数据存储在结构中并将结构存储在向量中,然后您可以编写自定义比较函数,以便对数据进行排序。

#include <iostream>
#include <vector>
#include <algorithm>

struct data
{
    int id;
    int value;
};

struct 
{
    bool operator()(const data & lhs, const data & rhs) { return lhs.id < rhs.id; }
} CompareId;

struct 
{
    bool operator()(const data & lhs, const data & rhs) { return lhs.value < rhs.value; }
} CompareValue;

int main()
{
    std::vector<data> database{ { 1,5 },{ 2,10 },{ 3,5 },{ 4,8 },{ 5,3 } };
    std::sort(database.begin(), database.end(), CompareValue);
    for (const auto & e : database)
        std::cout << e.id << "\t" << e.value << std::endl;
    std::sort(database.begin(), database.end(), CompareId);
    std::cout << std::endl;
    for (const auto & e : database)
        std::cout << e.id << "\t" << e.value << std::endl;
    return 0;
}

输出:

5   3
1   5
3   5
4   8
2   10

1   5
2   10
3   5
4   8
5   3

Live Example

答案 1 :(得分:0)

map始终自动对pair进行排序。也许你应该使用unordered_map来解决你的问题,它不会对pairs进行排序。因此,您希望按值排序,可以将pairs存储在ordered_map中,然后自己对它们进行排序。它会为您的问题提供更高的效率。详情请点击此处answer what you want。我希望这可以帮到你。