枚举作为C ++中函数的返回类型

时间:2011-11-11 15:08:25

标签: c++ map hashtable enumeration

以下java方法将哈希表的键返回为Enumeration。

Hashtable<String, Object> props = new Hastable<String, Object>(); 

// some code here

public final Enumeration getPropertyURIs() {
    return props.keys();
}

我想将此代码翻译为C ++。

更具体地说,如何在C ++中实现相同的函数,它返回std :: map的键的枚举?

2 个答案:

答案 0 :(得分:2)

你能得到的最接近的东西就是返回一个迭代器。问题是你实际上需要两个迭代器来指定一个范围。解决这个问题的一种方法是使用输出迭代器:

template<class output_iterator_type>
void getPropertyURIs(output_iterator_type out) {
    // loop copied from @dalle
    for (props_t::const_iterator i = keys.begin(); i != keys.end(); ++i)
    {
        *out = i->first;
        ++out;
    }
}

如果您现在想要将所有密钥存储在vector中,您可以这样做:

std::vector<std::string> keys;
getPropertyURIs(std::back_inserter(keys));

答案 1 :(得分:0)

C ++中的enum只是常量的集合。

你的意思是这样吗?

typedef std::unordered_map<std::string, boost::any> props_t;
props_t props;

std::vector<std::string> getPropertyURIs()
{
   std::vector<std::string> keys;
   for (props_t::const_iterator i = props.begin(); i != props.end(); ++i)
   {
      keys.push_back(i->first);
   }
   return keys;
}