#include <iostream>
#include <iterator>
#include <map>
#include <vector>
struct Sample {char value;};
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;
}
void print(const std::vector<Sample>&t)
{
for (const auto& s : t) {
std::cout << s.value << " ";
}
std::cout << std::endl;
}
int main() {
std::map<int, Sample> samples{
{15, {'a'}},
{21, {'b'}},
{33, {'c'}},
{37, {'d'}},
{49, {'e'}}
};
auto triplets = get_n_uplets(3, samples);
for (const auto& triplet : triplets) {
print(triplet);
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDx2ZWN0b3I+CgpzdHJ1Y3QgU2FtcGxlIHtjaGFyIHZhbHVlO307IAoKc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8U2FtcGxlPj4gZ2V0X25fdXBsZXRzKHN0ZDo6c2l6ZV90IG4sIGNvbnN0IHN0ZDo6bWFwPGludCwgU2FtcGxlPiYgc2FtcGxlcykKewogICAgaWYgKHNhbXBsZXMuc2l6ZSgpIDwgbikgewogICAgICAgIHJldHVybiB7fTsKICAgIH0KICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPFNhbXBsZT4+IHJlczsKCiAgICBhdXRvIGZpcnN0ID0gc2FtcGxlcy5iZWdpbigpOwogICAgYXV0byBsYXN0ID0gc3RkOjpuZXh0KGZpcnN0LCBuIC0gMSk7CgogICAgZm9yICg7IGxhc3QgIT0gc2FtcGxlcy5lbmQoKTsgKytmaXJzdCwgKytsYXN0KSB7CiAgICAJc3RkOjp2ZWN0b3I8U2FtcGxlPiBpbm5lcjsKICAgIAkKICAgIAlmb3IgKGF1dG8gaXQgPSBmaXJzdDsgaXQgIT0gc3RkOjpuZXh0KGxhc3QpOyArK2l0KSB7CiAgICAJCWlubmVyLnB1c2hfYmFjayhpdC0+c2Vjb25kKTsKICAgIAl9CiAgICAgICAgcmVzLnB1c2hfYmFjayhpbm5lcik7CiAgICB9CiAgICByZXR1cm4gcmVzOwp9Cgp2b2lkIHByaW50KGNvbnN0IHN0ZDo6dmVjdG9yPFNhbXBsZT4mdCkKewoJZm9yIChjb25zdCBhdXRvJiBzIDogdCkgewoJCXN0ZDo6Y291dCA8PCBzLnZhbHVlIDw8ICIgIjsKCX0KCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7Cn0KCmludCBtYWluKCkgewoJc3RkOjptYXA8aW50LCBTYW1wbGU+IHNhbXBsZXN7CgkJezE1LCB7J2EnfX0sCgkJezIxLCB7J2InfX0sCgkJezMzLCB7J2MnfX0sCgkJezM3LCB7J2QnfX0sCgkJezQ5LCB7J2UnfX0KCX07CgkKCWF1dG8gdHJpcGxldHMgPSBnZXRfbl91cGxldHMoMywgc2FtcGxlcyk7CgogICAgZm9yIChjb25zdCBhdXRvJiB0cmlwbGV0IDogdHJpcGxldHMpIHsKICAgIAlwcmludCh0cmlwbGV0KTsKICAgIH0KfQo=