Estoy usando un conjunto para contener las estructuras que contienen varias cadenas. Quiero poder usar la funcionalidad find() de los conjuntos. Sin embargo, dado que el conjunto contiene estructuras, no funciona. Quiero find() para mirar una de las cadenas en la estructura cuando encuentra. ¿Cómo puede hacerse esto?Haciendo que encontrar trabajo con un conjunto de estructuras
Aquí está el código que traté de usar. Funciona bien, excepto en la parte donde se usa find().
#include <iostream>
#include <string>
#include <set>
using namespace std;
struct test
{
string key;
string data;
};
bool operator<(const test & l, const test & r)
{
return l.key < r.key;
}
bool operator==(const test & l, const test & r)
{
return l.key == r.key;
}
set<test> s;
int main()
{
test newmember;
newmember.key = "key";
newmember.data = "data";
s.insert(newmember);
s.find("key");
}
Éstos son los mensajes de error cuando intento compilar:
test.cpp:30:7: error: no matching member function for call to 'find'
s.find("key");
~~^~~~
In file included from test.cpp:3:
In file included from /usr/include/c++/4.2.1/set:65:
/usr/include/c++/4.2.1/bits/stl_set.h:429:7: note: candidate function not viable: no known conversion from 'const char [4]' to 'const key_type' (aka 'const test') for 1st argument
find(const key_type& __x)
^
/usr/include/c++/4.2.1/bits/stl_set.h:433:7: note: candidate function not viable: no known conversion from 'const char [4]' to 'const key_type' (aka 'const test') for 1st argument
find(const key_type& __x) const
^
1 error generated.
¿Cuál es el código para hacer eso? Puedo sobrecargar el operador
@ z-buffer: vea la versión actualizada de mi respuesta. Tu problema es que debes proporcionar 'find()' con instancia de tu estructura 'test'. – beduin