#include <iostream>
#include <memory>
struct Obj {
int a;
int b;
};
std::unique_ptr<int[]>
fn(Obj* os, size_t N, std::function<int(const Obj&)> keyFn)
{
auto arr = std::make_unique<int[]>(N);
for (size_t i = 0; i < N; ++i) {
arr[i] = keyFn(os[i]);
}
return arr;
}
int main() {
Obj os[] { { 1, 10 }, { 2, 20 } };
auto a1 = fn(os, 2, [](const Obj& o){ return o.a; });
auto a2 = fn(os, 2, [](const Obj& o){ return o.b; });
for (size_t i = 0; i < 2; ++i) {
std::cout << i << ": " << a1[i] << ", " << a2[i] << '\n';
}
}
CSNpbmNsdWRlIDxpb3N0cmVhbT4KCSNpbmNsdWRlIDxtZW1vcnk+CgkKCXN0cnVjdCBPYmogewoJCWludCBhOwoJCWludCBiOwoJfTsKCQoJc3RkOjp1bmlxdWVfcHRyPGludFtdPgoJZm4oT2JqKiBvcywgc2l6ZV90IE4sIHN0ZDo6ZnVuY3Rpb248aW50KGNvbnN0IE9iaiYpPiBrZXlGbikKCXsKCQlhdXRvIGFyciA9IHN0ZDo6bWFrZV91bmlxdWU8aW50W10+KE4pOwoJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTjsgKytpKSB7CgkJCWFycltpXSA9IGtleUZuKG9zW2ldKTsKCQl9CgkJcmV0dXJuIGFycjsKCX0KCQoJaW50IG1haW4oKSB7CgkJT2JqIG9zW10geyB7IDEsIDEwIH0sIHsgMiwgMjAgfSB9OwoJCQoJCWF1dG8gYTEgPSBmbihvcywgMiwgW10oY29uc3QgT2JqJiBvKXsgcmV0dXJuIG8uYTsgfSk7CgkJYXV0byBhMiA9IGZuKG9zLCAyLCBbXShjb25zdCBPYmomIG8peyByZXR1cm4gby5iOyB9KTsKCQkKCQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkgewoJCQlzdGQ6OmNvdXQgPDwgaSA8PCAiOiAiIDw8IGExW2ldIDw8ICIsICIgPDwgYTJbaV0gPDwgJ1xuJzsKCQl9Cgl9