【问题标题】:Using the <algorithm> library on arbitrary data types对任意数据类型使用 <algorithm> 库
【发布时间】:2011-06-09 14:03:41
【问题描述】:

之前我问过this question,这是关于如何制作我自己的集合操作类,例如交集、联合等

我选择的答案作为我的解决方案推荐了algorithm library,它已经实现了这些操作。我想让这些操作在我的数据类型上运行,如下所示:

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

所以有人建议我在我的结构(或类)中包含这些东西:

  • 公共复制构造函数。
  • 公共赋值运算符。
  • 一个公共析构函数。

我对 C/C++ 比较陌生,所以请有人为我在这里定义的示例结构提供这三件事吗?然后还如何在我的班级上使用其中一项操作(比如说set_intersection(...)

谢谢。

【问题讨论】:

    标签: c++ c


    【解决方案1】:

    在这种情况下,编译器提供了所有三个的合适实现 - 无需编写任何额外的东西,这样做会很糟糕,恕我直言。但是,您可能需要的是一个带参数的构造函数,以构造一个正确初始化的对象,以及一个 operator

    如果不知道你的结构做什么,很难提供这些,但假设你的集合成员有唯一的标签,你需要这样的东西:

    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;
        }
    };
    

    【讨论】:

    • operator&lt; 不需要成为成员函数。
    • 谢谢尼尔。那么只有几个(可能是基本的)问题。这个构造函数实际上在这里做什么?我不完全理解所谓的“复制构造函数”实际上是什么。另外,我如何在算法库中调用set_intersection(...) 来返回vectormy_data_types 的交集?感谢所有的帮助。
    • @vivid 复制构造函数是用于复制对象的构造函数。您使用的哪本 C++ 书籍没有涵盖这一点? StackOverflow 不会教你 C++ 编程的基础知识。
    • 那是我懒惰。我会在网上阅读复制构造函数:)。一个使用my_data_types 向量的set_intersection 示例会很棒(即vector&lt;my_data_type&gt;
    • @vivid 我强烈建议您不要尝试从在线资源中学习 C++,其中大多数确实很差。买一本书——这里有一个清单stackoverflow.com/questions/388242/…
    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 2019-05-26
    • 2022-11-03
    • 2018-10-28
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多