Chat telefónico loco (25 puntos) (un método simple de mapeo de mapas)

Dados los registros de llamadas de un gran número de usuarios de teléfonos móviles, encuentre al loco del chat con más llamadas.

Formato de entrada: la
entrada primero da un número entero positivo N (≤10 5), que es el número de registros de llamadas. Las siguientes N líneas, cada línea proporciona un registro de llamadas. En aras de la simplicidad, aquí solo se enumeran los números de teléfono móvil de 11 dígitos de la parte que llama y la parte que recibe, separados por espacios.

Formato de salida:
Indique el número de teléfono móvil del loco del chat y el número de llamadas en una línea, separados por espacios. Si tal persona no es única, se emite el número más pequeño entre los locos y el número de llamadas, y además se da el número de locos paralelos.

Muestra de entrada:

4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832
13588625832 3

Ideas de preguntas:
1. Primero piense en el mapeo del mapa, deje que el número de números correspondientes sea el segundo valor y luego considere ordenar el contenedor del mapa de acuerdo con el segundo valor. Cabe señalar aquí que la función de clasificación no se puede usar directamente para ordenar , y el mapa no se puede ordenar con Clasificar coincidencias. Además, el contenedor del mapa ordena el tamaño del valor de la clave. Para este problema, necesitamos ordenar de acuerdo con el tamaño del valor.
2. Por lo tanto, necesitamos lograr el propósito de ordenar. Necesitamos poner las cosas en el contenedor del mapa en el par <clave, valor>, y usar el par <clave, valor> como el tipo de vector. En este momento, puede personalizar la función mycmp El vector está ordenado. Si no lo entiende, mire el código, es simple y claro.
3. Si no comprende los puntos de conocimiento relevantes, se recomienda estudiar el contenido relevante, porque estas cosas son más importantes. Espero que este artículo pueda ayudarte un poco. Si no lo entiendes, puedes enviar un mensaje o comentario privado.

#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
map<string, int> mp;		//一开始存放数据的map容器
vector<pair<string, int>> vec;		//能够进行排序的vector容器,数据类型是pair<>
bool mycmp(pair<string, int>a, pair<string, int>b) {
    
     return a.second > b.second; };//自定义的比较函数
int main()
{
    
    
	int n, len;
	cin >> n;
	len = 2 * n;
	string s;
	for (int i = 0; i < len; i++)		//第一步把数据存到map容器中
	{
    
    
		cin >> s;
		mp[s]++;
	}		

	for (auto it = mp.begin(); it != mp.end(); it++)		//第二步,把map容器里的内容放到vector<pair<sting, int>>中
		vec.push_back(pair<string, int>(it->first, it->second));
	
	sort(vec.begin(), vec.end(), mycmp);		//排序
	int maxn = vec[0].second;
	int sum = 1;
	for (int i = 1; i < vec.size(); i++)		//查找聊天狂人有几个
	{
    
    
		if (vec[i].second == maxn)
			sum++;
		else
			break;
	}

	if (sum == 1)								//按照题目要求输出即可
		cout << vec[0].first << " " << vec[0].second << endl;
	else
		cout << vec[0].first << " " << vec[0].second << " " << sum << endl;
	
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/xdg15294969271/article/details/114019653
Recomendado
Clasificación