以下java方法将哈希表的键返回为Enumeration。
Hashtable<String, Object> props = new Hastable<String, Object>();
// some code here
public final Enumeration getPropertyURIs() {
return props.keys();
}
我想将此代码翻译为C ++。
更具体地说,如何在C ++中实现相同的函数,它返回std :: map的键的枚举?
答案 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;
}