获取表示地图子集的向量

时间:2015-08-08 11:08:34

标签: c++ c++11 std

我想根据固有顺序得到代表地图连续元素特定长度的每个可能子集的向量,例如:

enter image description here

如何做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以在订购密钥时迭代地图:

std::vector<std::array<Sample, 3u>> get_triplets(const std::map<int, Sample>& samples)
{
    if (samples.size() < 3) {
        return {};
    }
    std::vector<std::array<Sample, 3u>> res;

    auto it = samples.begin();
    auto it1 = std::next(it);
    auto it2 = std::next(it1);

    for (; it2 != samples.end(); ++it, ++it1, ++it2) {
        res.push_back({{it->second, it1->second, it2->second}});
    }
    return res;
}

Live Demo

编辑:拥有n-uplets,与之前的三元组版本相比有一些小变化:

std::vector<std::vector<Sample>> get_n_uplets(std::size_t n, const std::map<int, Sample>& samples)
{
    if (samples.size() < n) {
        return {};
    }
    std::vector<std::vector<Sample>> res;

    auto first = samples.begin();
    auto last = std::next(first, n - 1);

    for (; last != samples.end(); ++first, ++last) {
        std::vector<Sample> inner;

        for (auto it = first; it != std::next(last); ++it) {
            inner.push_back(it->second);
        }
        res.push_back(inner);
    }
    return res;
}

Live Demo