1
#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 でこれを試したところ、間違った出力が得られました

私の悪い英語で申し訳ありませんが、私を助けてください。

4

2 に答える 2

3

ここで私を打ち負かしたことがいくつかあります:

  1. std::map の動作をエミュレートするために std::pair の配列を使用するのはなぜですか?
  2. インデックスを 0 ではなく 1 から開始するのはなぜですか?

とにかく、std::sort は、Max Lybbert が既に述べたように、3 番目の引数を取ります。その引数は、ソート関数へのポインターです。これはあなたの場合に機能します:

bool mysort(std::pair<const char*, int> a, std::pair<const char*,int> b) {
    return (strcmp(a.first, b.first) < 0);
}
于 2011-12-10T06:14:14.483 に答える