如何从STL容器实例中获取元素类型?

时间:2012-09-12 15:39:43

标签: c++ stl c++11 decltype

我知道value_type,key_type ......但是它们对类型进行操作,而不是对实例进行操作。 我试过了 像这样的东西:

std::set<uint64_t> mySet;   

decltype (mySet)::value_type pos;

但它不起作用。

编辑:我使用VS 2010.

EDIT2:这段代码的目的是获得一个类型来赋予它boost :: lexical_cast&lt;&gt; 是否有解决方案可以实现这一目标? 我想要这样的东西:

   mySet.insert(boost::lexical_cast<decltype(mySet)::value_type>(*it));
  // it is a iterator in vector of strings

EDIT3:这有效:

mySet.insert(boost::lexical_cast<decltype(mySet)::value_type>(*it));

3 个答案:

答案 0 :(得分:16)

decltype (mySet)::value_type是正确的。确保在编译器中启用了C ++ 11模式。如果你有,那么这是一个编译器错误。

可能的解决方法是使用身份元功能:

template <typename T>
struct identity { typedef T type; };

identity<decltype(mySet)>::type::value_type pos;

答案 1 :(得分:7)

我会反过来做这件事:

typedef std::set<uint_least64_t> set_type;
set_type mySet;
set_type::value_type pos;

答案 2 :(得分:0)

以下是打印优先级队列元素的打印方法的简单示例:

template<typename T> void print_queue(T& queue) {
    while (!queue.empty()) {
        std::cout << queue.top() << " ";
        queue.pop();
    }
    std::cout << '\n';
}

问题是,在打印完所有元素后,队列为空。 要将队列恢复到原始状态,我们添加了矢量容器。类型 队列元素的队列是从队列中推导出来的:

template<typename T> void print_queue(T& queue) {
    std::vector<T::value_type> vec;
    while (!queue.empty()) {
        std::cout << queue.top() << " ";
        vec.push_back(queue.top());
        queue.pop();
    }
    std::cout << '\n';
    for (auto & v : vec) {
        queue.push(v);
    }
}