排序对不工作

Sorting pair not working

本文关键字:工作 排序      更新时间:2023-10-16
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
pair<char[300],int> list[10000];
int main()
{
    char a[300],b[20000];
    int n;
    cin >> n;
    for(int d=1; d<=n; d++)
    {
        list[d].second = 0;
    }
    int k=0;
    for(int d=1; d<=n; d++)
    {
        cin >> a;
        bool masuk=false;
        for(int e=1; e<=k;e++)
        {
            if (strcmp (a,list[e].first) == 0) 
            {
                masuk = true;
                list[e].second++;
                break;
            }
        }
        if (!(masuk))
        {
            k++;
            strcpy(list[k].first,a);
            list[k].second++;
        }
        cin.getline(b,256);
    }
    sort(list+1,list+k+1);
    for(int e =1; e<=k; e++)
    {
        cout << list[e].first << " " << list[e].second << endl;
    }
}

如果我输入

3
Spain Donna Elvira
England Jane Doe
Spain Donna Anna

我希望它输出

England 1
Spain 2

但它输出

Spain 2
England 1

是不是应该排序第一个?但这似乎不起作用。我在Dev c++上尝试了这个,它输出正确,但是当在ideone上尝试这个时,它输出错误

请帮助我,对不起,我的英语不好。

这里有几件事让我感到困惑:

    为什么你使用std::pair数组来模拟std::map的行为?
  1. 为什么从1开始索引而不是0?
无论如何,std::sort接受第三个参数,Max Lybbert已经提到过。该参数是一个指向排序函数的指针。
bool mysort(std::pair<const char*, int> a, std::pair<const char*,int> b) {
    return (strcmp(a.first, b.first) < 0);
}

我很惊讶你没有得到一个编译器错误。std::sort不知道如何比较数组中的元素。您需要将该信息作为std::sort的第三个参数传递进来(作为指向函数的指针或函子)。