用一对来索引 STL 映射是个好主意吗?
我只是想知道制作一个像“
std::map< std::pair<int,int>,std::string >
只是想知道如何在内部对这些对进行排序”的数据结构是否是一个好主意...:S
谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我只是想知道制作一个像“
std::map< std::pair<int,int>,std::string >
只是想知道如何在内部对这些对进行排序”的数据结构是否是一个好主意...:S
谢谢!
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
这些对将使用对
operator<
(std::map
的默认比较操作)进行排序,其中(C++03, 20.2.2/6)
请注意,使用一对可能会造成混淆作为映射键,特别是在使用映射迭代器时(
it->first.first
获取键对的第一个元素看起来很荒谬)。但在某些情况下,这可能比为键创建一个全新的结构更容易。与所有事情一样,请谨慎使用,如果它不简单且易于理解,那么最好找到一种不同的方法来完成它。
The pairs would be ordered using the pair
operator<
(the default compare operation forstd::map
), which(C++03, 20.2.2/6)
Note that it could get confusing using a pair as a map key, especially when working with map iterators (
it->first.first
to get the first element of the key pair just looks ridiculous). But in some cases it might be easier than creating a whole new struct for the key.As with all things, use with care, and if it's not straightforward and easy to understand, it's probably better to find a different way to do it.
如果您希望哈希表有两个索引,那么您应该查看 Boost::multiindex 容器。
至于回答你的问题,如果你能处理其他人指出的局限性,为什么不呢?我始终支持任何清晰、易于使用且适合当前问题目的的解决方案。
If you're looking to have two indexes for your hash table then you should look at Boost::multiindex containers.
As far as answering your question, why not if you can deal with the limitations others have pointed out. I'm always for any solution that is clear, easy to use, and suits the purposes of the problem at hand.
你可以。在我看来,你应该做一些比这更有表现力的事情,因为
std::pair
并不是为此目的。例如,如果您想通过哈希值将字符串存储在映射中,则可以执行以下操作:然后使用
map
而不是map ;,字符串>
。You can. In my opinion though you should do something more expressive than that, because
std::pair
wasn't meant for this. For example, if you want to store strings in a map by their hash then you can do something like:And then use
map<Hash,string>
rather thanmap<pair<int,int>,string>
.