我有一些从数据库获取到C ++的键值对。我正在考虑将它们存储在地图容器中并使用sort()对它们进行排序。我需要每对的顺序(No.1,No.10等)。我刚刚意识到sort()只会以DESC / ASC顺序返回一个向量,但不会给出每个元素的特定顺序。我应该如何编写程序来获取元素的顺序?谢谢
INPUT
输出
答案 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
答案 1 :(得分:0)
map
始终自动对pair
进行排序。也许你应该使用unordered_map
来解决你的问题,它不会对pairs
进行排序。因此,您希望按值排序,可以将pairs
存储在ordered_map中,然后自己对它们进行排序。它会为您的问题提供更高的效率。详情请点击此处answer what you want。我希望这可以帮到你。