Как искать общие элементы в 2 массивах вектора, который является ключом на карте?

У меня есть карта, которая принимает vector<int> размером 3 в качестве ключа и строки в качестве значения. Эта карта содержит около 2000 записей, которые анализируются из файла. Мне нужно проверить, присутствует ли каждый элемент вектора 1 в векторе 2.

int index;
map<vector<int>,string>::iterator i2;

for ( i2=my_map.begin() ; i2 != my_map.end(); i2++)
{
int id_cnt = (*i2).first.at(0);
int prev_cnt = (*i2).first.at(1);

for (index=0; index < my_map.size(); index++)
{
if (prev_cnt==id_cnt[index])                     //error
{
//code to do something
}
}

cout << "hi" <<endl;
cout << (*i2).second << endl;
}

Я получаю ошибку:

Msgstr «Значение индекса не является массивом, указателем или вектором.

Я работаю над C ++ только неделю назад и ничего не понимаю! 🙁

Редактировать:

У меня есть 4 столбца:

4 6 65 gdsg
6 1 64 sggg
1 2 34 wetw
7 4 25 wtwt
8 5 25 heyq
5 7 23 fheh
2 5 12 fetd

Я должен проверить, присутствует ли каждое число из 1-го столбца в столбце 2. Итак, в случае 1-го элемента столбца 1: 4 присутствует в столбце 2. Теперь я беру соответствующий номер 3-го столбца (25) и помещаю это в векторе 26 алфавитов под 20-й элемент. 20-й, потому что мне нужно получить последний символ соответствующей строки (wtwt). Т 20-я буква.

Я должен сделать этот процесс для элементов в столбце 1.

0

Решение

Основываясь на ваших изменениях, я предлагаю вам изменить структуру данных на что-то вроде этого:

struct Entry {
int next;
int index;
string text;
};

typedef map<int, Entry> MyMap;

for(MyMap::iterator i = my_map.begin(); i < my_map.end(); ++i) {
MyMap::iterator next = my_map.find(i->second.next);
if(next == my_map.end()) {
// not found!
break;
}
}

Ваш первый столбец идет в следующем, ваш третий столбец идет в индексе. Второй столбец — это ключ карты.

1

Другие решения

Предложил бы вам также передать функцию сравнения при определении карты.

Пожалуйста, посмотрите на определение карты

http://www.cplusplus.com/reference/stl/map/map/

0

По вопросам рекламы [email protected]