std::sort()
требует итераторов с произвольным доступом, но std::map
итераторы не являются итераторами с произвольным доступом, поэтому вы не можете вызывать std::sort()
на std::map
, поскольку они не реализуют operator-
.
std::map
- это отсортированный контейнер, отсортированный по его ключам. А поскольку ваши ключи простые char
, они уже сопоставимы как есть.
правильный способ настраиваемой сортировки std::map
- это либо:
- укажите компаратор непосредственно в декларации
map
, например:
#include <bits/stdc++.h>
using namespace std;
struct comp {
bool operator()(const char &a, const char &b) const {
return a < b; // or whatever you want...
}
};
int main() {
// your code goes here
int t;
cin >> t;
while (t--) {
string s;
cin >> s;
map<char, int, comp> m;
for(int i = 0; i < s.size(); i++) {
m[s[i]]++;
cout << s[i];
}
cout << "hello";
}
return 0;
}
Укажите
operator<
для типа ключа. Вы не можете перегрузить операторы для основных типов, но можете для пользовательских типов:
#include <bits/stdc++.h>
using namespace std;
struct my_key {
char value;
my_key(char ch) : value(ch) {}
bool operator<(const char &rhs) const {
return value < rhs.value; // or whatever you want...
}
};
int main() {
// your code goes here
int t;
cin >> t;
while (t--) {
string s;
cin >> s;
map<my_key, int> m;
for(int i = 0; i < s.size(); i++) {
m[s[i]]++;
cout << s[i];
}
cout << "hello";
}
return 0;
}