Вставить значения в вектор множеств int в C++
Я хочу вставить значения в vector
из set<int>
, который определяется с помощью typedef
как указано ниже:
typedef std::set<int> blockSet_t;
std::vector<blockSet_t>* myvector
Я хочу иметь такие ценности, чтобы myvector[0]
имеет set
из int
s, myvector[1]
имеет другой set
из int
и так далее.
В настоящее время я передаю это vector
к функции, которая анализирует файл, который имеет set
целых чисел.
Подобно:
main()
{
std::vector<blockSet_t> myvector;
filereader(myvector);
}
Я прочитал set
из файла и сохранить его в другом blockSet_t myset;
Я использую следующий цикл для хранения этого set
в определенное место в vector
:
filereader(&myvector)
{
for(int i=0;i<size;i++)
{
myvector.push_back(myset); // It does not give error but I don't know myset is stored in which location
//what I want is to have someting like this
myvector[i].push_back(myset); //so I can store different sets at different locations
}
}
Я также не мог понять, как отображать значения изнутриvector
,
Так как это вектор set
s, я хочу отобразить каждый set
(по другому vector
индекс).
Любая помощь в этом отношении высоко ценится.
Благодарю.
1 ответ
Прежде всего, push_back
функция называется push_back
потому что это отталкивает объект назад.
Это означает, что если ваш vector
пусто, и вы звоните push_back
ваш толкаемый объект будет иметь 0
место нахождения.
Если твой vector
имеет n
объекты внутри него, это означает, что после push_back
ваш толкаемый объект будет иметь n
индекс
myvector.push_back(myset);
std::cout<<"index of myset is "<<myvector.size()-1<<std::endl;
Во-вторых, если вы хотите напечатать значения, вы должны создать свой собственный operator<<
функция перегрузки для std::ostream
учебный класс. Это распространенный способ печати значений в C++.
Предположим, вы хотите напечатать set
в кудрявом {}
браслеты и вектор в квадрате []
из них:
#include <ostream>
inline std::ostream& operator<<(std::ostream &os,const blockSet_t &mySet)
{
os<<"{ ";
for(const auto &value:mySet)
{
os<<value<<' ';
}
os<<"};
return os;
}
inline std::ostream& operator<<(std::ostream &os,const std::vector<blockSet_t> &myvector)
{
os<<"[ ";
for(const auto &mySet:myvector)
{
os<<mySet<<' ';
}
os<<"];
return os;
}
Далее вы должны cout
ваш объект, как это:
#include <ostream>
main()
{
std::vector<blockSet_t> myvector;
filereader(myvector);
std::cout<<myvector<<std::endl;
}