c++-standard-library

___ qstntxt ___

Ich weiß, dass ein ähnliches Problem unter diesem Link beantwortet wurde Hilf mir, dieses C ++ zu beheben std :: setze Komparator Aber leider habe ich genau das gleiche Problem, und ich bin nicht in der Lage, den Grund dafür zu verstehen. Daher brauche ich Hilfe, um es zu lösen.

Ich verwende VS2010 und meine Release-Binärdatei läuft ohne Probleme, aber die Debug-Binärberichte:

Mein Komparator sieht so aus:

%Vor%

Mein Satz wird wie folgt deklariert:

%Vor%

Könnte mir jemand vorschlagen, warum meine Debug-Binärdatei bei dieser Behauptung versagt? Liegt es daran, dass ich die Funktion wcscmp () verwende, um die breite Zeichenfolge zu vergleichen, die in meinem Set gespeichert wird?

Vielen Dank im Voraus !!!

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ answer5886646 ___

Das Problem ist, dass Ihr Komparator keine streng-schwache Ordnung induziert. Es sollte nur für Pfade, die "weniger" sind, wirklich zurückkehren - nicht für alle, die anders sind. Ändere es zu:

%Vor%

Alternativ funktioniert auch die Verwendung von %code% - aber die Menge hat eine umgekehrte Reihenfolge.

Der Algorithmus muss den Unterschied zwischen kleiner und größer wissen, um zu arbeiten, nur ungleiche gibt nicht genug Informationen. Ohne Informationen kleiner als / größer als, kann die Menge möglicherweise keine Reihenfolge beibehalten - aber darum geht es in einer Menge.

    
___ tag123cstandardbibliothek ___ In der Programmiersprache C ++ ist die C ++ - Standardbibliothek eine Sammlung von Klassen und Funktionen, die in der Kernsprache geschrieben sein können oder auch nicht und Teil von C ++ sind ___ answer5886649 ___

%code% benötigt einen gültigen Comperator, der sich wie %code% oder %code% verhält.

Der std :: set-Code hat erkannt, dass Ihr Operator & lt; ist nicht gültig, und als eine Hilfe für Sie ausgelöst die Behauptung, die Sie zeigten.

Und tatsächlich: Ihr Partner sieht wie ein %code% aus, nicht wie ein %code%

Eine der Regeln, der ein %code% folgen sollte, ist, dass %code% und %code% nicht beide wahr sein können. In Ihrer Implementierung ist es.

Korrigieren Sie Ihren Code zu:

%Vor%

und dir sollte es gut gehen.

    
___ answer5881701 ___

Nachdem wir etwas mehr Zeit damit verbracht haben, haben wir uns entschieden, einen anderen Ansatz zu wählen, der für mich funktioniert hat.

Also haben wir wchar_t * mit dieser Methode in einen String konvertiert:

%Vor%

Und dann habe ich diese Zeichenfolge im Set gespeichert. Dadurch musste ich mir keine Gedanken über den Vergleich der Elemente machen, die gespeichert werden, um sicherzustellen, dass alle Einträge eindeutig sind.

%Vor%

Alles was ich tun musste war:

%Vor%

Obwohl ich immer noch nicht weiß, was "Debug Assertion Failed" verursacht hat, als ich %code%

benutzt habe     
___ qstnhdr ___ Erhalte "Debug Assertion Failed!" für den gesetzten Vergleicher ___
1
Antwort

Wird die C ++ - Standardbibliothek auf Arduino vollständig unterstützt?

Keine Abfrage über <string> , sondern über die Standard-Bibliothek als Ganzes zur Verwendung auf Mikrocontrollern. Ich besitze noch kein Arduino-Board, um Code auszuführen, und wie der Titel sagt, bin ich neugierig, ob die C ++ - Stan...
01.06.2016, 17:34
2
Antworten

C ++ - Vorlagen, Standardargument als Methode

Für diese Implementierung der Auswahl sort: %Vor% Wie sollte ich es ändern, so dass Compare comp std::less Methode wäre, wenn letzter Parameter wird für die Sortiermethode übersprungen? Ich habe das Überladen der Funktion versucht...
03.02.2017, 14:25
2
Antworten

Aufruf von Funktionen mit std :: optionalen Parametern

Ich habe eine Funktion, deren Signatur lautet: %Vor% (Ich habe den Alias std::experimental::optional , bis std::optional offiziell verfügbar ist.) Allerdings habe ich Schwierigkeiten, es sauber zu nennen. Der Compiler verweigert die...
06.02.2017, 00:41
2
Antworten

In MS Visual Studio 2013 nicht optional - was tun?

Ich möchte std::experimental::optional verwenden, aber MSVS 2013 sagt mir, dass es die Kopfzeile nicht finden kann. Warum ist es nicht dort? Kann ich meine eigenen Codes anderswo veröffentlichen? Der C ++ 14 Vorschlag vielleicht?
17.07.2015, 11:08
2
Antworten

Initialisierung von std :: discrete_distribution in VS2013

Ich habe eine std::vector<float> weights; , die die Liste der Gewichte enthält. Ich weiß nicht, was in dieser Liste sein wird, bis zu einem bestimmten Zeitpunkt, an dem das Programm ausgeführt wird. Ich würde gerne tun %Vor% aber VS2...
22.02.2014, 19:33
3
Antworten

Implementieren eines "String-Pools", der garantiert nicht verschoben wird

Ich brauche ein "String Pool" -Objekt, in das ich wiederholt eine "Folge von Zeichen" einfügen kann (ich benutze diesen Ausdruck als "String", ohne ihn mit std :: string oder einem C-String zu verwechseln), erhalte einen Zeiger zu der Sequenz un...
05.01.2014, 20:00
2
Antworten

Warum nimmt std :: min (std :: initializer_listT) Argumente nach Wert?

Als ich die Antwort auf diese Frage las, war ich überrascht, das zu finden std::min(std::initializer_list<T>) verwendet Argumente nach Wert. Wenn Sie std::initializer_list auf die Weise verwenden, die durch seinen Namen angedeu...
24.09.2014, 15:46
1
Antwort

Standardbibliotheken, die einen Allocator zuweisen, aber nicht verwenden

An den meisten Stellen, an denen die C ++ - Standardbibliothek Speicher zuweist, kann der Benutzer dies anpassen, indem er eine Klasse bereitstellt, die Allocator Anforderungen . Zum Beispiel nehmen fast alle Container ein Allokator-Template...
27.03.2017, 20:55
3
Antworten

Kann ein C ++ 14/17-Projekt binäre Bibliotheken verwenden, die mit dem C ++ 11-Standard kompiliert wurden, oder muss der Quellcode neu kompiliert werden?

Kann eine Binärdatei, die mit C ++ 11 kompiliert wurde, in einem c ++ 14/17-Projekt verwendet werden? Was ist mit einer C ++ 14 Binärbibliothek in einem C ++ 17 Projekt? Oder müsste der Quellcode unter Verwendung des gleichen Standards wie da...
25.10.2017, 04:41
2
Antworten

Liefert einen privaten Konstruktor für initializer_list konform?

Dieser Entwurfsstandard zeigt die Synopse für initializer_list . Es hat keinen privaten Konstruktor. Aber zwei Standardbibliotheksimplementierungen, die ich mir angesehen habe, libstdc ++ und libc ++, bieten beide private Konstruktoren:...
22.03.2015, 21:24