Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
tapochka
40 / 40 / 17
Регистрация: 25.04.2014
Сообщений: 499
#1

Детектировать, является ли контейнером set или является multiset - C++

07.06.2016, 04:26. Просмотров 387. Ответов 7
Метки нет (Все метки)

здравствуйте, вот есть детектирование является ли контейнер map или multimap:
C++
1
2
3
4
5
6
7
8
9
10
template< typename... >
using void_t = void;
 
template< typename, typename = void_t<> >
struct is_multi : std::true_type
{ };
 
template< typename Container >
struct is_multi<Container, void_t<decltype(Container::operator[])>> : std::false_type
{ };
как такое сделать для set и multiset(у них абсолютно идентичный интерфейс)? если это вообще возможно

Добавлено через 6 минут
з.ы. кстати не работает моя реализация мультимапов то оказывается...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2016, 04:26
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Детектировать, является ли контейнером set или является multiset (C++):

Является ли адаптер контейнера контейнером
75%, но некоторые вопросы вызывают недоверие. Например вопрос про стандартные...

Извлечение из класса поля которое является множеством (set)
Здравствуйте! У меня есть класс одно из полей которого множество...

Ошибка в роботе с контейнером: set iterator not incrementable
Задание:Дано предложение.Какие большие и маленькие буквы с этих...

Найти с помощью Set и Multiset все такие цифры, которые не встречаются в двузначных числах
Найти все такие цифры, которые не встречаются в двузначных числах. #include...

Определить, является ли текст является записью четного числа в семеричной системе
В заданный непустой текст входят только цифры и буквы. Определить,...

Проверить, является ли целое число трёхзначным, является ли оно квадратом
помогите пожалуйста новичку 1) Введите целое число и проверьте, является ли...

7
Unknownx
Заблокирован
07.06.2016, 08:12 #2
tapochka, попробуй использовать typeid http://en.cppreference.com/w/cpp/language/typeid
0
Croessmah
++Ͻ
14161 / 8086 / 1513
Регистрация: 27.09.2012
Сообщений: 19,926
Записей в блоге: 3
Завершенные тесты: 1
07.06.2016, 09:33 #3
Цитата Сообщение от tapochka Посмотреть сообщение
как такое сделать для set и multiset(у них абсолютно идентичный интерфейс)?
С чего бы он вдруг стал абсолютно идентичным?
У них есть различия.
Цитата Сообщение от tapochka Посмотреть сообщение
если это вообще возможно
В первую очередь - это разные типы, так что отсюда можно начать плясать.
К примеру, что-то такое:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//g++  4.9.3
 
#include <iostream>
#include <set>
#include <type_traits>
 
 
 
namespace details
{
    
    template<typename ...>
    struct is_multiset_impl
    {
        constexpr static bool value = false;
    };
    
    
    template<template<typename...>class Cont, typename ... Args>
    struct is_multiset_impl<Cont<Args...>>
    {
        constexpr static bool value = std::is_same<Cont<Args...>, std::multiset<Args...>>::value;
    };    
    
    
}
 
 
template<typename C>
constexpr bool is_multiset(const C& v)
{
    return details::is_multiset_impl<C>::value;
}
 
 
 
int main()
{
    std::multiset<int> x1;
    std::set<int> x2;
    int x3;
    std::cout << is_multiset(x1) ;
    std::cout << is_multiset(x2) ;
    std::cout << is_multiset(x3) ;
}
http://rextester.com/CPR30937
2
tapochka
40 / 40 / 17
Регистрация: 25.04.2014
Сообщений: 499
07.06.2016, 21:54  [ТС] #4
Цитата Сообщение от Croessmah Посмотреть сообщение
С чего бы он вдруг стал абсолютно идентичным?
ну у методов то сигнатуры одинаковые... да и методы одинаковые...

в общем ваш вариант мне приходил примерно в голову, но хотелось понтовее и лаконичнее
0
zarko97
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
18.01.2017, 01:13 #5
tapochka, насколько я помню, в мультимапах и мультисетах ключи могут быть одинаковыми,от этого и плясать нужно...можно сделать как у вас выше через expression sfinae, decltype и decval
0
GbaLog-
Любитель чаепитий
3156 / 1462 / 462
Регистрация: 24.08.2014
Сообщений: 5,180
Записей в блоге: 1
Завершенные тесты: 2
18.01.2017, 11:08 #6
Цитата Сообщение от Croessmah Посмотреть сообщение
К примеру, что-то такое
Не скомпилируется с, к примеру, unordered_set, потому что параметров шаблонных много будет. Это, конечно, тоже можно посчитать за детектирование.
1
Croessmah
++Ͻ
14161 / 8086 / 1513
Регистрация: 27.09.2012
Сообщений: 19,926
Записей в блоге: 3
Завершенные тесты: 1
18.01.2017, 11:27 #7
GbaLog-, всё решаемо же.

Цитата Сообщение от tapochka Посмотреть сообщение
но хотелось понтовее и лаконичнее
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
namespace details
{  
    
    struct is_multiset_impl
    {
        template<typename ... Args>
        constexpr static bool foo(const std::multiset<Args...>&){return true;}
        constexpr static bool foo(...){return false;}
    };    
    
    
}
 
 
template<typename C>
constexpr bool is_multiset(const C& v)
{
    return details::is_multiset_impl::foo(v);
}
С для отсеивания наследников нужно будет еще подкинуть кода.
4
tapochka
18.01.2017, 19:13  [ТС]     Детектировать, является ли контейнером set или является multiset
  #8

Не по теме:

Цитата Сообщение от zarko97 Посмотреть сообщение
tapochka, насколько я помню, в мультимапах и мультисетах ключи могут быть одинаковыми,от этого и плясать нужно...можно сделать как у вас выше через expression sfinae, decltype и decval
я уж и забыл, что я эту тему создавал)

0
18.01.2017, 19:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2017, 19:13
Привет! Вот еще темы с ответами:

Определить, является ли значение целочисленной переменной х четным. Если является, то вывести на печать значен
Определить, является ли значение целочисленной переменной х четным. Если...

Определите, является ли число степенью числа 2, и если является, то выведите значение этой степени
Дано натуральное число n. Определите, является ли оно степенью числа 2, и если...

Error C2039: Insert: не является членом "std::set<_Kty>"
Ругается компилятор: 1&gt;c:\visual studio...

Дано натуральное число n. Определите, является ли оно степенью числа 2, и если является, то выведите значение этой степени
Дано натуральное число n. Определите, является ли оно степенью числа 2, и если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru