У меня есть вектор 1D char, эмулирующий 2D-вектор (это требование). Этот вектор равен 000111 и эквивалентен вектору [0] = 000 и вектору [1] = 111 2D. Таким образом, он имеет две строки, одинаковые длины (в этом случае 3). Я хочу, чтобы установить каждую строку в качестве ключа в std::unordered_map
, так что я делаю:Как избежать создания новой строки?
#include <iostream>
#include <unordered_map>
#include <string>
#include <vector>
int main()
{
std::unordered_map<std::string, int> mymap;
std::vector<char> keys(2 * 3); // 2 keys, each one of length 3
for(int i = 0; i < 2; ++i)
{
for(int j = 0; j < 3; ++j)
{
keys[j + i * 3] = (i) ? '1' : '0';
}
}
// keys = 000111
for(int i = 0; i < 2; ++i)
{
mymap[std::string(keys.begin() + i * 3, keys.begin() + (i + 1) * 3)] = i;
}
for (auto& x: mymap) {
std::cout << x.first << ": " << x.second << std::endl;
}
/*
Output:
111: 1
000: 0
*/
return 0;
}
что делает меня несчастным, потому что я должен построить новую строку, а затем вставить, что на карту. Было бы неплохо, если бы я мог просто заменить его или что-то за один шаг. Могу я?
* «Строительство плохое?» * Да. 'char (0)! = '0'' –
Глупый из меня @BaummitAugen, вы правы, я обновил вопрос, пожалуйста, перечитайте! :) – gsamaras
@gsamaras Такая же проблема, как раньше. ;) Попробуйте 'keys [j + i * 3] = (i)? '1': '0'; ' –