有没有标准的 C++ 用于分解 std::pair 的函数对象?
有谁知道是否存在用于访问 std::pair 元素的事实上的标准(即 TR1 或 Boost)C++ 函数对象? 在过去的 24 小时内,我曾两次希望拥有类似于 Perl 哈希的 keys
函数的东西。 例如,最好在 std::map 对象上运行 std::transform 并将所有键(或值)转储到另一个容器。 我当然可以编写这样的函数对象,但我更愿意重用那些吸引了很多眼球的东西。
Does anyone know if there's a de-facto standard (i.e., TR1 or Boost) C++ function object for accessing the elements of a std::pair? Twice in the past 24 hours I've wished I had something like the keys
function for Perl hashes. For example, it would be nice to run std::transform on a std::map object and dump all the keys (or values) to another container. I could certainly write such a function object but I'd prefer to reuse something that's had a lot of eyeballs on it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
boost::bind
就是您所寻找的。例子:
boost::bind
is what you look for.Example:
从您提出问题的方式来看,我不确定这是否是正确的回答,但请尝试
boost::tie
(Boost::tuple 库的一部分)。 它也适用于 std::pair。From the way you worded your question, I'm not sure this is a proper response, but try
boost::tie
(part of the Boost::tuple library). It works onstd::pair
s too.boost::bind 通常用于适应 std ::映射容器以与算法一起使用。 这里是一个示例:
boost::bind is often used to adapt std::map containers for use with algorithms. Here is an example:
使用不同容器的组合怎么样?
例如,当我想将向量划分为补充映射中包含的项目和补充映射中未包含的项目时,我使用了以下内容:
现在我遇到了第二个问题 - 在应用程序运行期间, user_info 的 status bool 可以更改,稍后我想使用状态 bool 为 true 的项目重新分区向量,而不仅仅是包含在补充地图中。
但是,我似乎在访问嵌套对的第二项时遇到问题。
我尝试了以下操作,但我似乎无法访问嵌套对!
What about using combinations of different containers.
For example when I wanted to partition a vector into items contained in a supplemental map and items that where not contained in the supplemental map I used the following:
Now I have a second problem - during the running of the application the status bool of user_info can change, and later on I want to re-partition the vector with items that have a status bool of true rather than just being contained in the supplemental map.
However I seem to have a problem accessing the second item of a nested pair.
I tried the following but I cannot seem to access the nested pair!
看一下 boost::adaptors。 有预定义的适配器用于迭代映射键或值,而无需将它们复制到中间容器。
Take a look at boost::adaptors. There are predefined adaptors for iterating over map keys or values without copying them to an intermediate container.
没有建议的一个选项是
std::tr1::get
。 请参阅 n1745 的第 6.1.2 和 6.1.4 节。绝对不如您提到的
map
提取案例中的bind
那么容易使用,但仍然值得了解。 改编约翰内斯的代码:One option that wasn't suggested is
std::tr1::get
. See sections 6.1.2 and 6.1.4 of n1745.Definitely not as easy to use as
bind
in themap
extraction case you mentioned but still worth knowing about. Adapting Johannes' code: