Set ist ein sortierter assoziativer Container, der Objekte vom Typ Key speichert. Set ist ein einfacher assoziativer Container, was bedeutet, dass sein Werttyp, wie sowie sein Schlüsseltyp, Key ist. Es ist auch ein eindeutiger assoziativer Container, was bedeutet, dass keine zwei Elemente gleich sind.Das Paar <int, int> kann nicht als Schlüssel in C++ verwendet werden. STL
Ich habe versucht, ein set<pair<int, int>>
mit der Anzahl und der Lage zu bauen, wo es in der Zeichenfolge als key
erscheint.
Beim Versuch, einen pair<int, int>
als Schlüssel für set
einzufügen, war die Einfügung nicht erfolgreich, wenn das erste Element des Paares erneut angezeigt wurde, obwohl pair
eindeutig war.
#include <iostream>
#include <set>
#include <iterator>
using namespace std;
struct compare
{
bool operator()(const pair<int, int> &lhs, const pair<int, int> &rhs)
{
return lhs.first > rhs.first;
}
};
void print(set<pair<int, int>, compare> myset)
{
for(auto iter=myset.begin(); iter!=myset.end();++iter){
cout << iter->first << ' ' << iter->second << endl;
}
}
void BuildSet(int num)
{
set<pair<int, int>, compare> values;
string number = to_string(num);
for(int i=0; i<number.size(); ++i)
{
int quot = number[i]-'0';
values.insert(make_pair(quot, i));
}
cout << endl;
print(values);
cout << endl;
}
int main() {
BuildSet(98738);
}
Und der Ausgang war:
9 0
8 1
7 2
3 3
Mit dem Eintritt 8 4
als erstes Element fehlte dupliziert werden.
Ja, könnten Sie das tun. Oder benutze einfach 'std :: large>' –
StoryTeller
@StoryTeller Ja, das wäre der saubere Weg, es zu tun. Ich fügte das hinzu, falls irgendein Körper sich verfangen hatte, um seine eigene "Compare" -Methode zu schreiben. – thebenman
Oder nur 'lhs> rhs;' – juanchopanza