声明iter
类型的变量:
void Routes::viewroutes(){
typedef map<char*, char*>::const_iterator iter;
for (iter i =rtable.begin(); i != rtable.end(); ++i) {
cout << i->second << " " << i->first << endl;
}
}
只是为了好玩:),你可以使用我写的流地图的内容或多重映射到任何标准的流以下功能无论是标准输出,文件流。它处理所有类型的流如cout或wcout,例如:
template <class Container, class Stream>
Stream& printPairValueContainer(Stream& outputstream, const Container& container)
{
typename Container::const_iterator beg = container.begin();
outputstream << "[";
while(beg != container.end())
{
outputstream << " " << "<" << beg->first << " , " << beg->second << ">";
beg++;
}
outputstream << " ]";
return outputstream;
}
template
< class Key, class Value
, template<class KeyType, class ValueType, class Traits = std::less<KeyType>,
class Allocator = std::allocator<std::pair<const KeyType, ValueType> > >
class Container
, class Stream
>
Stream& operator<<(Stream& outputstream, const Container<Key, Value>& container)
{
return printPairValueContainer(outputstream, container);
}
请注意,作为映射键的'char *'不能完成大多数初学者所期望的操作。 std :: map排序后的默认比较将按照它们的地址对关键字__进行排序,而不是根据它们的值进行排序。 “blah”和“blah”比较是否相等,取决于编译器是否折叠相同的字符串文字 - 这是许多编译器的优化设置。通常你想使用'std :: string'而不是'char *'。 –
sbi
2010-06-10 20:11:22
那和内存问题。 char *是可憎的。 – 2010-06-10 20:13:27
sbi - 我很欣赏评论。我刚开始尝试弄清楚为什么我的地图没有按预期排序。 – BSchlinker 2010-06-10 20:52:40