繁体   English   中英

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

[英]How to get element type from STL container instance?

我知道value_type,key_type ......但它们是在类型上运行,而不是在实例上运行。 我试过像这样的东西:

std::set<uint64_t> mySet;   

decltype (mySet)::value_type pos;

但它不起作用。

编辑:我使用VS 2010。

EDIT2:这段代码的目的是得到一个类型来赋予它boost :: lexical_cast <>是否有一个解决方法可以实现? 我想要这样的东西:

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

编辑3:这有效:

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

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

可能的解决方法涉及使用标识元函数:

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

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

我会以相反的方式做到这一点:

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

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

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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM