У меня есть структура:
struct node
{
string val;
int count;
};
Я определил свой вектор таким образом:
typedef std::vector<node> StringVector;
typedef std::vector<StringVector> StringVector2D;
И вот мой код:
string arr[6] = {"hi","mr","ben","ss","rty","ben"};
StringVector2D twoD;
StringVector inner;
twoD.push_back(inner);
for(int f=0;f<6;f++)
{
node tmp;
tmp.val = arr[f];
tmp.count = arr[f].size();
twoD[0].push_back(tmp);
}
for (StringVector::iterator it = twoD[0].begin() ; it != twoD[0].end(); ++it)
{
cout<< it->val<<endl;
}
... В этом примере у меня есть только одно измерение в моем внешнем векторе, так как вы можете видеть это: twoD[0]
StringVector::iterator it = find(twoD[0].begin(), twoD[0].end(), "ben");
if(it == twoD[0].end())
{
cout<<"not found"<<endl;
}
Я использовал это
StringVector::iterator it = find(twoD[0].begin().val, twoD[0].end().val, "ben");
а также
StringVector::iterator it = find(twoD[0].begin()->val, twoD[0].end()->val, "ben");
Но это не сработало. Оцените любое предложение.
РЕДАКТИРОВАТЬ
Я определил свой собственный поиск:
struct find_word
{
string val;
find_word(string val) : val(val) {}
bool operator () ( const find_word& m ) const
{
return m.val == val;
}
};
И назовите это здесь:
StringVector::iterator it = find_if(twoD[0].begin()->val, twoD[0].end()->val, find_word("ben"));
Но он не может заставить его работать.
Вам нужно изменить функтор- find_if
.
struct find_word {
string val;
find_word(string val)
: val(val) {}
bool operator()(const node& m) const { return m.val == val; }
}; // ^^^^ the change is here
И используйте версию find_if
следующим образом:
StringVector::iterator it = find_if(twoD[0].begin(), twoD[0].end(), find_word("ben"));
// the change is here ^ and here ^
Функтор find_if
получает в качестве параметра в operator()
элемент контейнера для поиска. В этом случае twoD[0].begin()
и twoD[0].end()
дают вам доступ к элементам внутренний вектор и получаемые параметры являются типом хранения элемента во внутреннем векторном node
.
twoD[0]
являютсяnode
s. Вы ищете строку. Что это значит дляnode
чтобы соответствовать строке? Как компилятор должен это знать?