Использование библиотеки <algorithm>для произвольных типов данных - PullRequest
3 голосов
/ 09 июня 2011

Ранее я задавал этот вопрос о том, как создать собственный класс операций над множествами, например, пересечение, объединение и т. д.

Ответ, который я выбрал в качестве решения, рекомендовал библиотеку алгоритмов , в которой эти операции уже реализованы. Я хочу, чтобы эти операции работали над моими типами данных следующим образом:

struct my_data_type {
    int label;
    vector<string> x;
    vector<string> y;
    string str;
};

поэтому было предложено включить эти вещи в мою структуру (или класс):

  • Публичный конструктор копирования.
  • Публичный оператор присваивания.
  • Публичный деструктор.

Я относительно новичок в C / C ++, поэтому, может, кто-нибудь предоставит мне эти три вещи для примера структуры, которую я определил здесь? Тогда также, как использовать одну из операций в моем классе (скажем, set_intersection(...)?

Спасибо.

1 Ответ

2 голосов
/ 09 июня 2011

Компилятор обеспечивает подходящую реализацию всех трех в этом случае - не нужно писать ничего лишнего, и это будет плохим стилем, ИМХО.Однако вам, вероятно, понадобится конструктор, который принимает параметры для создания правильно инициализированного объекта, и реализация operator <(), позволяющая сравнивать ваши структуры. </p>

Не зная, что делает ваша структура,это трудно представить, но при условии, что у ваших участников сета будут уникальные ярлыки, вот что вам нужно:

struct my_data_type {
    int label;
    vector<string> x;
    vector<string> y;
    string str;

    my_data_type( int l, const string & s ) : label( l ), str( s ) {}

    bool operator<( const my_data_type & t ) const {
          return label < t.label;
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...