2013-02-23 4 views
0

У меня есть немного сложности, пытаясь пройти через набор строк. Методы, используемые для векторов и массивов, здесь не будут работать; Я попробовал множество способов попробовать пройти через набор, включая вызов итератора, но компилятор не купит его. Я смотрел онлайн, но ответа не было совершенно правильно.Поиск по набору

Domain.h

#ifndef DOMAIN_H_ 
#define DOMAIN_H_ 
#include <sstream> 
#include <string> 
#include <set> 

using namespace std; 

class Domain { 
public: 
Domain(); 
virtual ~Domain(); 
void add(string added_domain); 

    string toString(); 

private: 
    set<string> the_domain; 
    }; 

#endif /* DOMAIN_H_ */ 

Domain.cpp 
    include "Domain.h" 
    include <string> 
    include <set> 

Domain::Domain() { 
    // TODO Auto-generated constructor stub 

} 

Domain::~Domain() { 
    // TODO Auto-generated destructor stub 
} 

void Domain::add(string added_domain) 
{ 
    the_domain.insert(added_domain); 
} 

string Domain::toString() 
{ 
    // insert here 
} 

Надеюсь, мне не нужно спрашивать об этом снова. Спасибо за помощь!

+3

Конечно, вы можете использовать итератор для перемещения по множеству. Как насчет того, что вы показываете код итератора, который вы пытались, и сообщение об ошибке вместо пустых пустых заглушек? – us2012

+0

Что случилось с 'find'? – Beta

+1

* «Надеюсь, мне больше не придется спрашивать об этом» *. Спросите * что * снова ?? – WhozCraig

ответ

2
bool Domain::searchForString(const string &str) 
{ 
    return(the_domain.find(str) != the_domain.end()); 
} 
1

Вы можете использовать итераторы:

std::set<std::string> strs; 
for(std::set<std::string>::const_iterator it = strs.begin(); it != strs.end; ++i) { 
    std::cout << *it << std::endl; 
} 

Вы можете использовать повысить Еогеасп:

std::set<std::string> strs; 
BOOST_FOREACH(const std::string &str, strs) { 
    std::cout << str << std::endl; 
} 

вы можете использовать STD :: Foreach

struct out { void operator()(const std::string &str) { std::cout << str << std::endl; } 
std::set<std::string> strs; 
std::foreach(strs.begin(), strs.end(), out()); 

вы можете использовать C++ 11:

std::set<std::string> strs; 
for(const auto &str: strs) { 
    std::cout << str << std::endl; 
} 

Вы можете использовать другие std-контейнеры, а не только их с тем же кодом вместо std :: set.

1
#include <sstream> 

string Domain::toString() const { 
    std::ostringstream ss; 

    for (const auto& s : strs) { 
     ss << s << std::endl; 
    } 

    return ss.str(); 
} 
+0

'string toString()' вероятно, не должно иметь ничего общего с записью на экран ... –

+0

@MooingDuck Кажется логичным, немного изменил его. – Snps

Смежные вопросы