Вы можете упаковать их в лямбду и сразу же вызвать (т.е. IIFE ).
const std::set<int> set_all = [&set_one, &set_two]() {
std::set<int> set{ set_one.cbegin(),set_one.cend() };
set.insert(set_two.cbegin(), set_two.cend());
return set;
}(); // ---> call the lambda!
Однако, если у вас есть наборы в глобальная область видимости (например, @ Kevin упомянуто) , вы должны использовать лямбда, которая принимает два набора в качестве аргументов
#include <set>
using Set = std::set<int>; // type alias
const Set set_one = { 1,2,3 };
const Set set_two = { 11,15 };
const Set set_all = [](const Set& setOne, const Set& setTwo)
{
Set set{ setOne.cbegin(), setOne.cend() };
set.insert(setTwo.cbegin(), setTwo.cend());
return set;
}(set_one, set_two); // ---> call the lambda with those two sets!
или просто
const std::set<int> set_all = []()
{
std::set<int> set{ set_one.cbegin(),set_one.cend() };
set.insert(set_two.cbegin(), set_two.cend());
return set;
}(); // ---> call the lambda!
Я знаю, как объединять наборы во время выполнения, это не то, что я ищу.
Нет , вы не можете создать std::set
во время компиляции, поскольку он использует динамическое c выделение . Следовательно, все происходит во время выполнения. Даже указанная выше лямбда.