【发布时间】:2013-05-23 04:09:38
【问题描述】:
我有以下 C++ 代码:
struct MyStruct
{
int a[2];
int b[2];
};
std::map<std::pair<int, int> , MyStruct*> MyMap;
现在我在 MyMap 上运行这个循环:
for(std::map<std::pair<int, int> , MyStruct*>::iterator itr = MyMap.begin(); itr != MyMap.end(); ++itr)
{
std::pair<int, int> p (itr->first().second, itr->first().first);
auto i = MyMap.find(p);
if(i != MyMap.end())
{
//do something
}
}
我实际上要做的是通过交换另一对的元素来形成一对,例如,我在 MyMap 中有一个密钥对(12,16),还有另一个密钥对(16,12);这两个键存在于 MyMap 中,我确定。但是当我应用上述技术 MyMap 不返回对应于交换键的值时,我猜测 MyMap.find(p) 与 Key 的指针匹配;但是有没有办法让我可以强制 MyMap.find(p) 匹配 Key (pair) 中的相应值,而不是匹配 Key (pair) 中的指针?还是我在这里做错了什么?
【问题讨论】:
-
你知道如果你写“使用命名空间std”你就不必每次都写std::?只是一个旁注可以帮助你。
-
我知道,只是为了澄清代码:)
-
@cerkiewny,
using namespace std有很多副作用。不要使用它。 -
对我来说,您正在使用 find 新创建的指向 std:pair
p 的指针。它会比较“p”指针的地址和地图中现有的地址,因此代码永远不会在地图中找到实际的“p”。 -
@cerkiewny stackoverflow.com/questions/1452721/…