类中关联容器数据成员的比较函数

Posted

技术标签:

【中文标题】类中关联容器数据成员的比较函数【英文标题】:comparison function of an associate container data member in class 【发布时间】:2009-05-06 09:17:14 【问题描述】:

我有这样的课:

class MyClass
public:
    MyClass(int Mode);
private:
    std::map < int, std::string, CompFunc > data;
;

数据成员必须根据Mode参数使用不同的比较函数。

if Mode == 1, then use CompFunc1.
if Mode == 2, then use CompFunc2.
etc.

但是 CompFunc 模板参数是固定在那里的,我怎么能动态地使它呢?

谢谢。

【问题讨论】:

【参考方案1】:
struct Cmp

    explicit Cmp(int mode) : mode_(mode) 

    bool operator()(int lhs, int rhs) const
    
        switch (mode_)
        
            case 1: return CompFunc1(lhs, rhs); break;
            case 2: return CompFunc2(lhs, rhs); break;
            // etc.
        
    

private:
    int mode_;
;

class MyClass

public:
    explicit MyClass(int Mode) : cmp(mode), data(cmp) 
private:
    Cmp cmp;
    std::map<int, std::string, Cmp> data;
;

【讨论】:

【参考方案2】:

您可以使用与 map 相同的比较谓词。

class MyClass

    CompFunc cmp;
    map<int, std::string, CompFunc> data;
public:
    MyClass(int Mode) : cmp( get_cmpfunc(Mode) ), data(cmp) ...
    bool operator == (...)
    
        cmp(...);
    
;

【讨论】:

【参考方案3】:

编写一个符合正确接口的包装类/函数,但根据模式(或其他变量)分派到正确的函数。

【讨论】:

以上是关于类中关联容器数据成员的比较函数的主要内容,如果未能解决你的问题,请参考以下文章

容器排序

说说string类

c++ 容器类常用成员函数

C++中得sort函数的比较函数(第三个参数)为什么要声明为static

sort中的比较函数compare

一图总结C++中关于指针的那些事