Мой цикл выглядит похоже на это: < /p>
Код: Выделить всё
string word = "";
string s = "pip pip pop som"
unordered_map dic;
for (char c : s) {
if ('a'
Я пытался сделать std :: move (word) < /code> в DIC < /code >, но это не сработало.
Можете ли вы, пожалуйста, советуйте о том, как не копировать здесь, и использовать std :: move
Я, к сожалению, не могу создать слово внутри цикла.
Когда я сделал минимальный пример для вопроса, он стал еще более запутанным: < /p>
#include
#include
#include
#include
int main()
{
using namespace std;
map m;
string word;
for (auto i : views::iota(0, 10)) {
word.push_back('a');
++m[word]; // I would like to avoid copying here
word.clear();
}
for (auto [word, count] : m) {
cout
< /blockquote>
< Pre Class = "lang-cpp prettyprint-override">word.push_back('a');
++m[word];
< /code>
Выходы: < /p>
a 1
aa 1
aaa 1
aaaa 1
aaaaa 1
aaaaaa 1
aaaaaaaaaaa 1
aaaaaaaaaaa 1
aaaaaaaaaa 1
aaaaaaaaaaaaa 1 < /p>
< /blockquote>
word.push_back('a');
++m[move(word)];
< /code>
Выходы: < /p>
4
aa 3
aaa 2
aaaa 1 < /p>
< /blockquote>
Последний меня сбивает с толку. Похоже, он не перемещает значение, но также не копирует его на каждой итерации. Код> используется на следующих итерациях, и его жизнь длиннее.
Но почему он так хаотично?>
Подробнее здесь: https://stackoverflow.com/questions/790 ... id-copying