【问题标题】:How to use `std::multimap` or any other container to sort multiple values?如何使用 `std::multimap` 或任何其他容器对多个值进行排序?
【发布时间】:2019-09-25 02:19:45
【问题描述】:

我期待解决一个首先需要对一些数据进行排序的问题。

示例 - Key -> Valuesstd::multimap

它根据键自动按升序存储数据。

但是问题出现了,当我需要根据它们的对重复的进行排序时。

我尝试了一种愚蠢的方法,只需将一组重复的 key 转移到一个新的 std::multimap 并排序并存储回来,但重复编码太多了,无法实现一个单一的东西导致空间和时间复杂度增加。

例如:

Key - Values
 9  -  e
 3  -  b
 1  -  c
 1  -  a
 5  -  d
 9  -  a

排序后的值预期为:

1 - a
1 - c
3 - b
5 - d
9 - a
9 - e

但是使用 multimap 的输出会返回:

1 - c
1 - a
3 - b
5 - d
9 - e
9 - a

当有多个value集合对应一个key时,这个问题会进一步升级。

由于我是 C++ 的新手,我无法弄清楚如何使用预先存在的容器来做到这一点。

这件事在SQL 中很容易实现,但在C++ 中,我不知道。

【问题讨论】:

  • 在 C++ 中,您不应该使用容器进行排序。你应该使用std::sort
  • 请提供您尝试解决问题的方法。否则你几乎找不到任何人试图帮助你。
  • 显示应该修复的代码。
  • "这个东西在 SQL 中很容易实现,但在 C++ 中,我不知道。" 嗯,是的。其中一个是关系数据库,另一个是通用编程语言。 multimap 不是数据库。 SQL 数据库表也不排序;您只需获得已排序的 视图

标签: c++ algorithm sorting data-structures stdmap


【解决方案1】:

如果可以稍微改变一下数据结构,

  1. 您可以使用 std::vectorstd::pair<int, char>,然后 相应地对其进行排序,
  2. 或者简单地使用std::set<std::pair<int, char>>,它将按照std::pair的默认opererator<进行排序。

【讨论】:

  • 谢谢,这将在一定程度上解决我的问题,但我无法对集合中的值进行任何修改。
  • @Mrityunjay 我建议提出一个新的问题,显示代码解释什么“我不会能够对集合中的值进行任何修改”。这样,其他人就能以更好的方式帮助您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 2018-09-05
相关资源
最近更新 更多