Я пытаюсь решить проблему, когда я вставляю символы на карту типа <char, int>
. Если char уже существует на карте, я увеличиваю int на 1. Я создал свой собственный компаратор для определения приоритетов элементов на карте. Приоритет не работает так, как я надеюсь, что это сработает, поскольку в конце вывод не соответствует порядку.Карта не сортируется относительно компаратора C++
#include <iostream>
#include <string>
#include <map>
#include <iterator>
using namespace std;
struct classcomp {
bool operator()(const int& a, const int& b) const {
return a < b;
}
};
bool isPresent(map<char,int,classcomp> mymap, char c){
return (mymap.find('b') != mymap.end());
}
int main(){
string input="dadbadddddddcabca";
map<char,int,classcomp> mymap;
char temp;
for(string::iterator it = input.begin(); it!=input.end(); ++it){
temp = *it;
if(!isPresent(mymap, temp))
mymap.insert(pair<char,int>(*it,1));
else
mymap[temp]++;
}
for (auto& x: mymap) {
cout << x.first << ": " << x.second << '\n';
}
return 0;
}
дает следующий результат:
a: 4
b: 2
c: 2
d: 8
Карты сортируются в соответствии с ключом. Ваше сравнение не отличается от сравнения по умолчанию для 'char'. – juanchopanza
Компаратор предназначен для сортировки ключей, а не значений. –
Клавиши выглядят правильно отсортированными: 'a, b, c, d'. –