如何在C++中存储地址?

如何在C++中存储地址?,c++,dictionary,linked-list,C++,Dictionary,Linked List,我试图找到两个链表之间的交点。我已经知道如何通过计算两个列表长度的绝对差异并替换其中一个指针来解决这个问题。 我想知道是否有可能通过存储每个节点的地址以及访问次数来解决这个问题,在地图中存储节点被访问的次数 int findMergeNode(SinglyLinkedListNode* head1, SinglyLinkedListNode* head2) { map<int,int>m1; //map<int*,int>m1 ?? //map&l

我试图找到两个链表之间的交点。我已经知道如何通过计算两个列表长度的绝对差异并替换其中一个指针来解决这个问题。 我想知道是否有可能通过存储每个节点的地址以及访问次数来解决这个问题,在地图中存储节点被访问的次数

int findMergeNode(SinglyLinkedListNode* head1, SinglyLinkedListNode* head2) {
    map<int,int>m1;
    //map<int*,int>m1 ??
    //map<address,int>m1??
    SinglyLinkedListNode *temp = head1;
    while(temp!=nullptr) {
        m1[temp]++;
        temp = temp->next;
    }
    temp = head2;
    while(temp!=nullptr) {
        m1[temp]++;
        temp = temp->next;
    }
    for(auto it=m1.begin();it!=m1.end();it++) {
        if(it->second > 1) {
            temp = it->first;
            return temp->data;
        } 
    }
    return 0;
}
如果不需要按顺序迭代指针,另一个选项是:

unordered_map<const SinglyLinkedListNode *, int> m1;
有些人可能会说这样更好,因为指针没有有用的顺序

如果不需要按顺序迭代指针,另一个选项是:

unordered_map<const SinglyLinkedListNode *, int> m1;

有些人可能会说这更好,因为指针没有有用的顺序。

显而易见的解决方案可能是使用:

std::map<SinglyLinkedListNode const *, int> m;
std::unordered_map<SinglyLinkedListNode const *, int> m;
然而,这表明用作键的指针的相对顺序有一定的意义,这里的情况并非如此,而且很少有这样的情况

更好的解决方案是使用:

std::map<SinglyLinkedListNode const *, int> m;
std::unordered_map<SinglyLinkedListNode const *, int> m;

这正确地表明,只有用作键的指针值的唯一性才是相关的,而不是它们的相对顺序。

显而易见的解决方案可能是使用:

std::map<SinglyLinkedListNode const *, int> m;
std::unordered_map<SinglyLinkedListNode const *, int> m;
然而,这表明用作键的指针的相对顺序有一定的意义,这里的情况并非如此,而且很少有这样的情况

更好的解决方案是使用:

std::map<SinglyLinkedListNode const *, int> m;
std::unordered_map<SinglyLinkedListNode const *, int> m;


这正确地表明,只有用作键的指针值的唯一性才是相关的,而不是它们的相对顺序。

您是否尝试编译和运行代码?当你这样做时会发生什么?如果你的第二个地图有一百万个节点,而第一个节点是交叉点,你就浪费了整个第二个链表。@PaulMcKenzie同意,但我的问题更多的是为了在地图中存储地址,而不是效率本身。如果你不这么说,我是不会注意到的。@ShrenikRaj记住,评论部分是评论,而不是答案。我对你的代码和方法发表了评论。如果你想要的话,这里有std::set_交叉点。你试过编译和运行代码吗?当你这样做时会发生什么?如果你的第二个地图有一百万个节点,而第一个节点是交叉点,你就浪费了整个第二个链表。@PaulMcKenzie同意,但我的问题更多的是为了在地图中存储地址,而不是效率本身。如果你不这么说,我是不会注意到的。@ShrenikRaj记住,评论部分是评论,而不是答案。我对你的代码和方法发表了评论。如果你想要的话,这里有std::set_交集。谢谢,这太琐碎了。我认为这是不对的。我添加了一个解释原因的答案,并进行了修复。看起来地图版本可能根本不是UB。不过无序的版本更好:谢谢,这太琐碎了。我不认为这是正确的。我添加了一个解释原因的答案,并进行了修复。看起来地图版本可能根本不是UB。无序版本仍然更好:挑剔,map use class Compare=std::less,不是为什么说它是UB?这似乎表明它应该是好的:尽管在实践中,对于普通平台,我使用