Можно ли инициализировать набор путем копирования? - PullRequest
0 голосов
/ 19 октября 2018
std::vector<std::set<int>> m;
m[0].insert(0);
m[0].insert(1);
std::set<int> n = m[0]; // is this allowed?
for(std::set<int>::iterator iter = n.begin(); iter < n.end(); iter++)  // error in this line, "<" not defined.

Можно ли инициализировать набор путем прямого копирования?В последней строке произошла ошибка.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018
  • Можно ли инициализировать набор путем прямого копирования?

да

  • В последней строке есть ошибка

В написанном forloop используется оператор "<" для сравнения, если <code>iter все еще меньше, чем конечный итератор иззадавать.Но итератор не имеет определенного оператора "<".Это вызывает сообщение об ошибке.Вместо этого используйте <code>!=.

  • Кроме того, ваш вектор не содержит элемент.поэтому m [0] выходит за пределы.Сначала поместите элемент!
0 голосов
/ 19 октября 2018

Можно ли инициализировать набор путем прямого копирования?

Из cppreference :

Создает новый контейнер из множества данныхисточники и опционально, используя предоставленный пользователем распределитель alloc или объект функции сравнения comp.
...
3) Конструктор копирования.Создает контейнер с копией содержимого other. Если alloc не предоставлен, allocator получается путем вызова std :: allocator_traits :: select_on_container_copy_construction (other.get_allocator ()).
...

Проблема в вашем коде: вы определяете вектор без каких-либо элементов внутри него и пытаетесь изменить элемент на месте 0.
Два решения:

// Solution 1
std::vector<std::set<int>> m(1); // Define vector with one element

// Solution 2
std::vector<std::set<int>> m;
m.push_back(std::set<int>()); // Add new element to the vector with push_back
m.emplace_back(); // Add new element to the vector with emplace_back (recommended)

РЕДАКТИРОВАТЬ:

для последней строки изменить < с !=:

for(std::set<int>::iterator iter = n.begin(); iter != n.end(); iter++)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...