支持多个聚合级别的操作

时间:2010-11-09 17:40:46

标签: c++ data-structures

假设我的结构或类看起来像这样:

struct foo{
   string attribute_1;
   int    attribute_2;
   string attribute_3;

int value_1; int value_2; double value_3; };

在不同属性上支持foo集合的聚合操作有哪些好方法?例如。我可能想要将value_1求和,其中attribute_1是某种东西,或者属性2是什么,属性3是什么。

我一直在使用boost :: multi_index这样做,但我想听听别人怎么做。也许当你需要这种能力时,最好使用嵌入内存数据库。其他人为此做了什么?

1 个答案:

答案 0 :(得分:0)

STL算法和仿函数将允许您以多种方式执行此类操作。例如,要将value_1与value_1相加,您可以执行类似的操作(免责声明:这不是在编译器附近

class MyFunctor
{
public:
    explicit MyFunctor(const string &str) : str_(str), sum_(0) {}
    bool operator() (const foo &f) const
    {
        if (f.attribute_1 == str_)
        {
            sum_ += f.value_1;
        }
    }
    int sum() const { return sum_; }

private:
    string str_;
    int    sum_;
};

...


std::cout << stl::for_each(v.begin(), v.end(), MyFunctor("blah")).count() << std::endl;

其中v例如是std::vector<foo>