C++程序按值对字典进行排序

c++程序按值对字典进行排序

有一些被称为字典的数据结构在各种计算机语言中可用。一种特殊形式的更快的数据结构,它根据键和值存储数据,就是字典。它将键值对保留在那里,以便可以通过键快速搜索某些组件,几乎实时。类似字典的数据结构包含在C++ STL语言标准中。这个数据结构被称为”map“。map生成任何类型的键和值对(类型必须在编译之前定义,因为我们使用的是C++)。在本节中,我们将看看如何使用C++根据其值对字典条目进行排序

我们首先看一下地图数据结构是如何定义的。这些内部模板需要两种。所需的库和语法显示如下 –

定义地图数据结构的语法

#include map mapVariable;

登录后复制

要在本例中使用地图数据结构,我们必须导入“map”库。这需要类型 1 和 2 的数据。 Type1 表示键参数的数据类型,而 type2 表示值类型。从地图类型类派生的对象称为mapVariable。现在让我们研究一下如何根据这些关键因素来组织地图。

使用Vector of Pairs

在这个想法中,我们只是创建了一个键值对的向量(动态数组,它是从C++ STL中获得的另一个元素)。然后通过创建比较函数进行排序。然后将内容再次以排序的格式存储到一个map中。

立即学习“C++免费学习笔记(深入)”;

算法

以地图 M 作为输入

定义一个动态数组 A 来存储键值对

对于 M 中的每个键值对 p,执行

将 p 插入 A

结束

按照它们的键对A进行排序

创建空地图newMap

对于 A 中的每对 p –

将对 p 插入 newMap

结束

返回新地图

示例

#include #include #include #include using namespace std;// Create a comparator function to perform key-value pair comparisonbool compare ( pair  &a, pair  &b ){   return a.second  sorting( map  givenMap ){   vector > pairVec;   map newMap;      for ( auto& it : givenMap ) {      pairVec.push_back( it );   }      sort( pairVec.begin(), pairVec.end(), compare);      for ( auto& it : pairVec ) {      cout & givenMap ){   for ( auto& it : givenMap ) {      cout  givenMap;      givenMap = { { "Three", 3 },        { "Two", 2 },        { "Four", 4 },        { "One", 1 },        { "Five", 5 }   };      cout 

输出

Before Sorting: Key: Five, value: 5Key: Four, value: 4Key: One, value: 1Key: Three, value: 3Key: Two, value: 2After Sorting: Key: One, value: 1Key: Two, value: 2Key: Three, value: 3Key: Four, value: 4Key: Five, value: 5

登录后复制

我们已经进行了排序,如果我们将最终结果存储在map中,排序前后将看不到任何差异,这是因为map数据结构大部分时间以键的排序形式保存数据。在这里,我们使用向量根据值进行排序。如果我们直接从向量中打印它们,可以找到顺序。

使用一组对

可以使用另一种类型的数据结构——集合,对映射数据结构中的键值对进行排序。数据在集合数据结构中保持有序。因此,在向集合中添加元素后,不需要再次进行排序。为了更好地理解,让我们来看一下算法。

算法

以地图 M 作为输入

定义一个集合 S 来存储键值对

对于 M 中的每个键值对 p,执行

将 p 插入 S

结束

创建空地图newMap

对于 S 中的每一对 p -

将对 p 插入 newMap

结束

返回新地图

示例

#include #include #include #include using namespace std;// Create a comparator function to perform key-value pair comparisonstruct compare {   template       bool operator()(const T& a, const T& b) const   {      if (a.second != b.second) {         return a.second  sorting( map  givenMap ){   set, compare> pairSet( givenMap.begin(), givenMap.end() );   map newMap;      for ( auto& it : givenMap ) {      pairSet.insert( it );   }      for ( auto& it : pairSet ) {      cout & givenMap ){   for ( auto& it : givenMap ) {      cout  givenMap;      givenMap = { { "Three", 3 },        { "Two", 2 },        { "Four", 4 },        { "One", 1 },        { "Five", 5 }   };      cout 

输出

Before Sorting: Key: Five, value: 5Key: Four, value: 4Key: One, value: 1Key: Three, value: 3Key: Two, value: 2After Sorting: Key: One, value: 1Key: Two, value: 2Key: Three, value: 3Key: Four, value: 4Key: Five, value: 5

登录后复制

结论

在这篇文章中,我们看到了两种不同的方法来对字典数据结构进行排序(在C++中称为map),并按值进行排序。由于map是哈希映射,其键的数据使用哈希算法进行存储。尽管键是不同的,但是不同键的值可能相同。我们使用set和vector排序,其中向量和集合都携带了配对信息,我们对它们进行了排序。每个配对都有两种不同的排序方式。值类型是第二个类型,而键类型是第一个。

以上就是C++程序按值对字典进行排序的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2583283.html

(0)
上一篇 2025年3月6日 14:31:46
下一篇 2025年3月5日 15:55:22

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 十进制转二进制的C语言程序实现

    问题 如何使用C语言中的函数将十进制数转换为二进制数? 解决办法 在在这个程序中,我们在 main() 中调用一个二进制函数。被调用的二进制数转换函数将执行实际的转换。 我们使用的将十进制数转换为二进制数的调用函数的逻辑如下 –…

    2025年3月6日
    200
  • C程序检查强数

    给定一个数字’n’,我们需要检查给定的数字是否是强数。 强数是指其所有数字的阶乘之和等于数字’n’。阶乘是指将小于该数字的所有数字(包括该数字)相乘的结果,用!(感叹号)表示。例如:4!= 4…

    2025年3月6日
    200
  • 使用STL根据因子数量进行排序

    使用STL对向量进行排序是小菜一碟。我们可以使用著名的sort()函数来完成这个任务。真正的挑战是计算每个数字的因子数量。 因子是能够完全整除另一个数的数字,即余数为零。 遍历所有数字以计算因子可能是一种方法,但我们将在本文中尝试优化和达到…

    2025年3月6日
    200
  • C程序求第n个偶数

    给定一个数字N,我们需要找到第N个偶数。 偶数是能够被2整除且余数为零的数字。例如2、4、6、8、10等。 如果我们仔细观察偶数列表,我们也可以表示它们为 2*1=2, 2*2=4, 2*3=6, 2*4=8,…2*N。 因此,…

    2025年3月6日
    200
  • 反转链表的C程序

    在这个问题中,我们给出了一个链表。我们的任务是创建一个程序来反转链表。 该程序将反转给定的链表并返回反转后的链表。 链表是一个包含项目的链接序列。每个链接包含到另一个链接的连接。 示例 9 -> 32 -> 65 -> 1…

    2025年3月6日
    200
  • 按字符的ASCII值对字符串进行排序

    ASCII 值 ASCII(美国信息交换标准代码)是计算机和互联网上文​​本数据最常见的字符编码格式。在标准 ASCII 编码数据中,256 个字母、数字或特殊附加字符和控制代码都有唯一值。 问题陈述 现在,在这个问题中,我们需要根据字符的…

    2025年3月6日
    200
  • C++程序以给定值找到反正弦

    在三角学中,我们最常使用几个比率:正弦、余弦、正切和其他一些比率。从给定的角度,可以计算这些比率。但是,如果我们有比率值,我们还可以使用反三角函数计算角度。 在本文中,我们将讨论如何通过 C++ 中的反正弦(反正弦)方法从正弦值获取弧度角。…

    2025年3月6日
    200
  • 检查给定字符串是否是关键字的C程序?

    关键字是在C++库中预定义或保留的单词,具有固定的含义,并用于执行内部操作。C++语言支持超过64个关键字。 每个关键字都以小写字母形式存在,如auto、break、case、const、continue、int等。 C++语言中的32个关…

    2025年3月6日
    200
  • C++程序从用户获取输入

    在任何编程语言中编写程序时,接收输入是我们几乎在所有程序中要做的基本工作。有时我们直接从控制台获取输入,有时我们从文件中获取输入。从文件中获取输入有一定的好处,因为它不需要我们一遍又一遍地输入,有时我们可以将一些好的输入测试用例保存到文件中…

    2025年3月6日
    200
  • 十进制转二进制的C程序?

    将整数从十进制 (base-10) 转换为二进制 (base-2)。假设整数的大小为 32 位,需要将数字除以基数。计算机使用它来将整数值更改为计算机的字节。 Input:10Output:1010 登录后复制 说明 如果十进制数是10 1…

    2025年3月6日
    200

发表回复

登录后才能评论