про шаблон set stl
Код:
set <vector<int>> vectors;
Если спрашиваете, значит итераторы отмели уже по каким-то причинам или нет? итераторы - стандартный способ.
Код:
//Синтаксис стандарта С++11
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main()
{
vector<int> a{1,2,3}, b{4,5}, c{6,7,8,9};
set<vector<int>> v;
v.insert(a);
v.insert(b);
v.insert(c);
auto i = v.find(b);
cout << (*i)[1] << endl; //b[1] = 5
return 0;
}
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main()
{
vector<int> a{1,2,3}, b{4,5}, c{6,7,8,9};
set<vector<int>> v;
v.insert(a);
v.insert(b);
v.insert(c);
auto i = v.find(b);
cout << (*i)[1] << endl; //b[1] = 5
return 0;
}
Цитата: sadovoya
P.S. Не понял, зачем вам понадобился std::set еще и для произвольного доступа. Почему не вектор векторов? Советую взглянуть на совет 76 из книги Герб Саттер & Андрей Александреску "Стандарты программирования на С++. 101 правило и рекомендация". Вот ссылка.
Постановка задачи такая: есть n-ое количество векторов, каждый вектор состоит из двух логических частей: 1-ая часть из 36 разрядов, 2-ая из 24 разрядов. Надо найти все одинаковые вектора по 1-ой части, затем объединить вектора таким образом, чтобы 1-часть осталась прежней, а 2-ая должна быть получена через операцию XOR.
Я сделал так:
Код:
class container
{
public:
container()
{
max_index=0;
}
vector<int> input_vector[200];
vector<int> output_vector[200];
int max_index;
int insert(vector<int> arg_input_vector, vector<int> arg_output_vector)//операция вставки
{
int index=0, j=0;
while (index<max_index)//сравнение по всем векторам
{
if (input_vector[index]==arg_input_vector)
{
cout << "similar vectors are found!" << endl;
for (j=0; j<arg_output_vector.size(); j++)
{
if (arg_output_vector[j]==1)
{
if (output_vector[index][j]==0)
{
output_vector[index][j]=1;
}
}
}
index=max_index;
return 1;
}
index++;
}
input_vector[max_index]=arg_input_vector;
output_vector[max_index]=arg_output_vector;
max_index++;
return 0;
}
};
{
public:
container()
{
max_index=0;
}
vector<int> input_vector[200];
vector<int> output_vector[200];
int max_index;
int insert(vector<int> arg_input_vector, vector<int> arg_output_vector)//операция вставки
{
int index=0, j=0;
while (index<max_index)//сравнение по всем векторам
{
if (input_vector[index]==arg_input_vector)
{
cout << "similar vectors are found!" << endl;
for (j=0; j<arg_output_vector.size(); j++)
{
if (arg_output_vector[j]==1)
{
if (output_vector[index][j]==0)
{
output_vector[index][j]=1;
}
}
}
index=max_index;
return 1;
}
index++;
}
input_vector[max_index]=arg_input_vector;
output_vector[max_index]=arg_output_vector;
max_index++;
return 0;
}
};
Писать сей отвратительный класс мне пришлось в связи с незнанием шаблонов stl.