строке, создать по ним map, а потом эту временную строку переместить во множество)? или почему не проходит тест?
map<string_view, string_view> translations;
set<string> words;
{
string source("source"), target("target");
translations[source] = target;
words.insert(move(source));
words.insert(move(target));
}
ASSERT_EQUAL(translations.count("source"), 1);
Там вьюха должна протухнуть в мапе
А как переписать чтобы не протухало и без лишних копий?
Сделай мапу от строк и мувай туда
Если делать две мапы source_to_target и target_to_source от строк, то будут ненужные копии. а хочется иметь контейнер со всеми строками, а мапы как string_view
У тебя на скрине 1 мапа. Просто мувай строки в контейнкр и не будет копий
сорри, вот что я имею в виду. map<string_view, string_view> target_to_source, source_to_target; set<string> words; { string source("source"), target("target"); target_to_source[source] = target; source_to_target[target] = source; words.insert(move(source)); words.insert(move(target)); }
Ну , я смотрю ,для корректной раюоты этого кода без копий нельзя
Тут без копий можно отстрелить ногу
там insert возвращает итератор, может из него делать string_view как нибудь?
о, кстати, да, спасибо
Как тут поможет инсерт?
Получилось как-то так. Работает map<string_view, string_view> target_to_source, source_to_target; set<string> words; { string source("source"), target("target"); auto source_it = words.insert(move(source)); auto target_it = words.insert(move(target)); target_to_source[*target_it.first] = *source_it.first; source_to_target[*source_it.first] = *target_it.first; }
Обсуждают сегодня