`kk
22-07-2005, 20:40
Hallo.
Ich habe hier ein Set und möchte überprüfen, ob das Einfügen erfolgt ist oder nicht. Um das zu erreichen sind mir zwei Möglichkeiten eingefallen:
a) Einfach vorher prüfen, ob der neue Wert schon im Set ist
oder
b) Das zurückgegebene pair von insert anschauen. Da steht genau das drin, was ich wissen möchte.
Ich wollte es mal mit Methode b) versuchen, a) ist ja langweilig (und wahrscheinlich auch langsamer).
Hier mal ein Beispiel:
#include <utility>
...
// Hier würde ich gerne zurückgeben, ob param
// eingefügt worden ist oder eben nicht...
bool Klasse::methode( const string& param )
{
pair< iterator, bool > ret = m_set.insert( param );
return true;
}
Ich bekomme aber folgenden Fehler:
g++ -c -W -Wall -pedantic -O -c -o datei.o datei.cpp
datei.cpp: In member function `bool Klasse::methode(const std::string&)':
datei.cpp:29: error: type/value mismatch at argument 1 in template parameter
list for `template<class _T1, class _T2> struct std::pair'
datei.cpp:29: error: expected a type, got `iterator'
datei.cpp:29: error: ISO C++ forbids declaration of `ret' with no type
datei.cpp:29: error: cannot convert `
std::pair<std::_Rb_tree_iterator<std::string, const std::string&, const
std::string*>, bool>' to `int' in initialization
datei.cpp:29: warning: unused variable `int ret'
make: *** [datei.o] Error 1
Kann mir jemand sagen, was ich falsch mache?
Vielen Dank für Hilfe.
Kai
Ich habe hier ein Set und möchte überprüfen, ob das Einfügen erfolgt ist oder nicht. Um das zu erreichen sind mir zwei Möglichkeiten eingefallen:
a) Einfach vorher prüfen, ob der neue Wert schon im Set ist
oder
b) Das zurückgegebene pair von insert anschauen. Da steht genau das drin, was ich wissen möchte.
Ich wollte es mal mit Methode b) versuchen, a) ist ja langweilig (und wahrscheinlich auch langsamer).
Hier mal ein Beispiel:
#include <utility>
...
// Hier würde ich gerne zurückgeben, ob param
// eingefügt worden ist oder eben nicht...
bool Klasse::methode( const string& param )
{
pair< iterator, bool > ret = m_set.insert( param );
return true;
}
Ich bekomme aber folgenden Fehler:
g++ -c -W -Wall -pedantic -O -c -o datei.o datei.cpp
datei.cpp: In member function `bool Klasse::methode(const std::string&)':
datei.cpp:29: error: type/value mismatch at argument 1 in template parameter
list for `template<class _T1, class _T2> struct std::pair'
datei.cpp:29: error: expected a type, got `iterator'
datei.cpp:29: error: ISO C++ forbids declaration of `ret' with no type
datei.cpp:29: error: cannot convert `
std::pair<std::_Rb_tree_iterator<std::string, const std::string&, const
std::string*>, bool>' to `int' in initialization
datei.cpp:29: warning: unused variable `int ret'
make: *** [datei.o] Error 1
Kann mir jemand sagen, was ich falsch mache?
Vielen Dank für Hilfe.
Kai