Esto:
Código
vector<string> text = load_vector(filename); sort(text.begin(), text.end()); text.erase(unique(text.begin(), text.end()), text.end());
es equivalente a:
Código
set<string> text = load_vector(filename);
O, si no quieres que load_vector devuelva un set:
Código
vector<string> temp = load_vector(filename); set<string> text( temp.begin( ), temp.end( ) );
Esto es así porque std::set es un contenedor que:
* Mantiene sus elementos debidamente ordenados
* No admite duplicados
Matas 2 problemas de un plumazo.
Eso sí, dos cosas a tener en cuenta:
* std::set no tiene push_back, no tendría sentido. En su lugar hay que usar "insert".
* std::set no incorpora el operador de indización "[]", para acceder a sus elementos se puede hacer uso de bucles tipo:
Código
for ( auto it = text.begin( ); it != text.end( ); ++it ) std::cout << *it << std::endl;
O si te gustan más, también lo puedes hacer con lambdas:
Código
std::for_each( text.begin( ), text.end( ), []( const std::string& str ) { std::cout << str << std::endl; } );
Y hablando ahora de tu problema... deberías asegurarte de que el archivo lo estás creando donde piensas. Prueba a poner la ruta completa. Puede ser que te esté intentando crear el archivo en otro directorio (el de trabajo, que no tiene que coincidir con el directorio donde se encuentra el ejecutable).