gpt4 book ai didi

c++ - 如何在 C++ 中对映射中的值进行排序

转载 作者:行者123 更新时间:2023-12-05 04:10:27 28 4
gpt4 key购买 nike

我正在尝试根据值对输出进行排序,但我不确定如何处理它。这是我当前的输出:

 E:2  
H:1
I:3
L:2
N:3
O:2
S:2
T:1
Y:1

这就是我想要的输出方式:

 I: 3 
N: 3
E: 2
L: 2
O: 2
S: 2
H: 1
T: 1
Y: 1

我的代码:

#include<iostream>
using std::cin;
using std::cout;
using std::endl;
#include<string>
using std::string;
#include<map>
using std::map;
#include<algorithm>
using std::sort;

int main()
{
string input;
int line = 0;
map<char, int> letters;
while (getline(cin, input))
{
line += 1;
for (int i = 0; i < input.length(); i++)
{
if (isalpha(input[i]))
{
if (letters.count(toupper(input[i])) == 0)
{
letters[toupper(input[i])] = 1;
}
else
{
letters[toupper(input[i])] += 1;
}
}
}
}

cout << "Processed " << line << " line(s)." << endl;
cout << "Letters and their frequency:" << endl;
for (auto it = letters.cbegin(); it != letters.cend(); ++it)
{

cout << it->first << ":" << it->second << "\n";

}
}

最佳答案

我们初学者应该互相帮助。:)

在任何情况下,您都需要第二个容器,因为 std::map 已经按键排序。

一般的方法是将 map 复制到其他容器中,并在输出之前对新容器进行排序。

对于您的任务,您可以使用 std::set 作为第二个容器。

给你。

#include <iostream>
#include <map>
#include <set>
#include <utility>

int main()
{
std::map<char, size_t> m =
{
{ 'E', 2 }, { 'H', 1 }, { 'I', 3 }, { 'L', 2 },
{ 'N', 3 }, { 'O', 2 }, { 'S', 2 }, { 'T', 1 },
{ 'Y', 1 }
};

for (const auto &p : m)
{
std::cout << "{ " << p.first << ", " << p.second << " }\n";
}
std::cout << std::endl;

auto cmp = [](const auto &p1, const auto &p2)
{
return p2.second < p1.second || !(p1.second < p2.second) && p1.first < p2.first;
};

std::set < std::pair<char, size_t>, decltype( cmp )> s(m.begin(), m.end(), cmp);

for (const auto &p : s)
{
std::cout << "{ " << p.first << ", " << p.second << " }\n";
}
std::cout << std::endl;
}

程序输出为

{ E, 2 }
{ H, 1 }
{ I, 3 }
{ L, 2 }
{ N, 3 }
{ O, 2 }
{ S, 2 }
{ T, 1 }
{ Y, 1 }

{ I, 3 }
{ N, 3 }
{ E, 2 }
{ L, 2 }
{ O, 2 }
{ S, 2 }
{ H, 1 }
{ T, 1 }
{ Y, 1 }

还要注意你程序中的那个而不是这个if-else语句

if (letters.count(toupper(input[i])) == 0)
{
letters[toupper(input[i])] = 1;
}
else
{
letters[toupper(input[i])] += 1;
}

你可以写

++letters[toupper(input[i])];

关于c++ - 如何在 C++ 中对映射中的值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44447642/

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