Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6475
Последний выпуск: 19.06.2015

про шаблон set stl

436
04 апреля 2014 года
Charley
176 / / 16.08.2011
Есть шаблон множество векторов

 
Код:
set <vector<int>> vectors;
Как получить доступ к произвольному элементу множества для изменения вектора?
403
04 апреля 2014 года
grgdvo
323 / / 04.07.2007
Если спрашиваете, значит итераторы отмели уже по каким-то причинам или нет? итераторы - стандартный способ.
316
05 апреля 2014 года
sadovoya
757 / / 19.11.2005
Код:
//Синтаксис стандарта С++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;
}
P.S. Не понял, зачем вам понадобился std::set еще и для произвольного доступа. Почему не вектор векторов? Советую взглянуть на совет 76 из книги Герб Саттер & Андрей Александреску "Стандарты программирования на С++. 101 правило и рекомендация". Вот ссылка.
436
10 апреля 2014 года
Charley
176 / / 16.08.2011
Цитата: 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;
    }
};
Операция insert вставляет 1-ую часть вектора(параметр arg_input_vector), 2-ую часть вектора(параметр arg_output_vector) в поля input_vector и output_vector, предварительно делая операцию сравнения, описанную выше. Таким образом, класс container является контейнером для всех векторов, у которых уникальна 1-ая часть и про-"XOR"-на 2-ая часть.
Писать сей отвратительный класс мне пришлось в связи с незнанием шаблонов stl.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог