Сортировка пары не работает - PullRequest
1 голос
/ 10 декабря 2011
#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, он вывел неправильно

Пожалуйста, помогите мне, извините за мой плохой английский.

Ответы [ 2 ]

3 голосов
/ 10 декабря 2011

Здесь есть несколько вещей, которые меня бьют:

  1. Почему вы используете массив std :: pair для эмуляции поведения std :: map?
  2. Почему вы начинаете индексирование с 1 вместо 0?

В любом случае, std :: sort принимает третий аргумент, как уже упоминал Макс Либберт. Этот аргумент является указателем на функцию сортировки. Этот работает в вашем случае:

bool mysort(std::pair<const char*, int> a, std::pair<const char*,int> b) {
    return (strcmp(a.first, b.first) < 0);
}
2 голосов
/ 10 декабря 2011

Я удивлен, что вы не получаете ошибку компилятора. std::sort не знает, как сравнивать элементы в вашем массиве. Вам нужно передать эту информацию в качестве третьего аргумента std::sort (как указатель на функцию или как функтор).

...