Присвоение значения по индексу в xarray присваивает весь массив

Я использую библиотеку «xtensor» для c ++. С его помощью я пытаюсь создать класс данных, содержащий пользовательские данные.
Иногда мне нужно указать некоторые данные группы пользователей в списке идентификаторов пользователей. Для этой задачи я использую систему логических флагов, чтобы отмечать пользователей, которых я хочу скопировать в новую таблицу.

class UserDataTable {
private:
xt::xarray<bool> which;
//... more code
}

UserDataTable::UserDataTable(int size){

//... more code

std::vector<std::size_t> shape(size, 1);
std::vector<bool> boolinit(size);
which = xt::adapt(binit, shape);

//... more code
}

В функции подмножества есть этот код:

for(int usercounter=0; usercounter<USER_LIST_COUNT; usercounter++){
std::string id = userlist(usercounter);
if(indexMap.count(id)>0){
int index = indexMap[id];
which(index) = true;
}
}

Но эта строка кода:
который (индекс) = истина;
присваивает «истинное» значение всем «каким» элементам массива.
Что я делаю неправильно?

1

Решение

std::vector<bool> это особый случай. operator[] возвращает ссылку std::vector<bool>::reference а также

Любые чтения или записи в вектор, которые происходят через
std::vector<bool>::reference потенциально читать или писать на весь
основной вектор.

3

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

Других решений пока нет …

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