Что меня смущает, так это то, что у меня есть карта, состоящая из size_t строки в качестве ключа, и строки как значение.Как продвигать итератор C++ через каждый символ в строке
std::multimap<size_t, std::string> wordMap;
Тогда у меня есть пара, которая хранит equal_range для всех строк с размером 4. Затем я хочу, чтобы перебирать в начале этого equal_range до конца этого equal_range. Начало - моя пара. Сначала и конец - моя пара. Вторая. Как бы я перебирал через каждый символ, что моя пара. Сначала указывает, а затем сравнивает это с каждым словом между парами. Первый и пара. Второй?
pair<multimap<size_t, string>::iterator, multimap<size_t, string>::iterator> key_range;
key_range = wordMap.equal_range(n);
В принципе, я хочу сравнить каждую букву в слове1 с каждым символом слова2. Продвиньте itr2, который является словом2, к следующему слову и сравните каждую букву в этой букве с каждой буквой в слове 1. Сделайте это для каждого слова, затем переместите itr1, который является словом1, к другому слову и сравните это с каждым словом. Как я могу получить каждый символ, на который указывает itr2? Я думаю, что первый цикл for выполняет это для первого итератора, но я не знаю, как это сделать для itr2.
for (word_map::iterator itr = key_range.first; itr != key_range.second; itr++) { //this loop will iterate through every word to be compared
for (word_map::iterator itr2 = next(key_range.first); itr2 != key_range.second; itr2++) { //this loop will iterate through every word being compared against itr1
int i = 0;
int hit = 0;
for (char& c1 : itr->first) {
char& c2{ (itr2)->first[i] };
if(c1 != c2)
hit++;
i++;
}
}
Я хотел бы сравнить каждую букву в каждом слове друг против друга, пока они имеют одинаковый размер строки. Тогда, если hit == 1 означает, что слова отключены только на 1 символ, и они должны быть отображены или сохранены в контейнере STL определенного типа, который группирует их. Я все еще новичок в STL, поэтому я думаю о наборе, но мне нужно больше узнать об этом.
для (word_map :: итератор itr2 = * (key_range ++). Первое, что я попытался – user5544610
Вы можете использовать 'станд :: следующая (key_range.first)', чтобы получить итератор после того. Он выиграл» t, если предоставленный итератор находится в конце. –
Итак, вы в основном хотите сравнить первое слово (на которое указывает key_range.first) на каждое другое слово (т.е. на каждый последующий итератор)? – notmyfriend