Zusammenstellung Probleme mit unordered set
Ich bin versucht, eine unordered_set
aus der C++ - std-Bibliothek. Ich bin mit dem std-namespace.
using namespace std;
Den unordered_set
ist innerhalb einer Funktion von mir. Ich möchte es verwenden, um memoize einige Werte.
int do_crazy_calculations(int n) {
static unordered_set<int> done_before;
done_before::iterator node_found = done_before.find(n);
//n has not been seen before, so do calculations and memoize the result.
if (node_found == done_before.end()) {
int result = actually_do_calculations(n);
done_before.insert(n, result);
return result;
}
//n has already been seen before, just return the memoized value.
else {
return node_found.get();
}
}
Jedoch bekomme ich diese compilation error:
CplusplusExperiment.cpp: In der Funktion
'int do_crazy_calculations(int)'
:
CplusplusExperiment.cpp:10:10: Fehler:'unordered_set'
nicht Namen eine Art
Hersteller: *** [CplusplusExperiment.o] Fehler 1
Allerdings habe ich mit einem Typ versehen unordered_set
- int
Recht? Was hat dieser Fehler zu bedeuten?
Hast du
Sind Sie kompilieren mit
#include <unordered_set>
?Sind Sie kompilieren mit
-std=c++0x
?std::unordered_set<int>::insert
nicht nehmen, zwei int
s, es dauert nur eine. Vielleicht sind Sie denken std::map
?
InformationsquelleAutor dangerChihuahua007 | 2012-01-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
using namespace std
- es ist eine Quelle von tausend frustrierenden Fehler.done_before
wirklich nicht den Namen eines Typs, den Namen einer Variablen. Namen geben, die Sie nutzen könntentypedef unordered_set<int> done_before_type
, danndone_before_type::iterator
arbeiten.<unordered_set>
InformationsquelleAutor Kornel Kisielewicz
sollte
unordered_set<int>::iterator node_found = ...
Normalerweise verwende ich ein typedef zur Vereinfachung der Benennung der Vorlagen-Variablen:
InformationsquelleAutor CapelliC
Zunächst unordered_set ist in der TR1 oder C++11.
Und zweitens erklären Sie die in Ihrer Funktion und dann testen Sie für einen gewissen Wert. Was ist der Punkt? Das set wird leer sein, jedes mal, wenn Sie die Funktion aufrufen. EDIT: sorry, habe nicht bemerkt, es war statisch.
InformationsquelleAutor kralyk