C++ 获取对迭代器中存储的数据的访问权限

C++ 获取对迭代器中存储的数据的访问权限,c++,iterator,std-pair,multiset,C++,Iterator,Std Pair,Multiset,我正在尝试使用std::multiset和std::pair来获得更舒适的体验。所以我写了一个小的主程序,它创建了一个multiset,并将元素推入其中,如下所示 #include <set> #include <utility> #include <iostream> #include <string> int main() { std::cout << "Hello World" << std::endl;

我正在尝试使用std::multiset和std::pair来获得更舒适的体验。所以我写了一个小的主程序,它创建了一个multiset,并将元素推入其中,如下所示

#include <set>
#include <utility>
#include <iostream>
#include <string>

int main()
{
    std::cout << "Hello World" << std::endl;

    /*
    std::multiset<std::pair<int, float> > set;
    std::multiset<std::pair<int, float> >::iterator it;
    set.insert(std::make_pair(534, 5.3));
    set.insert(std::make_pair(22, 9.2));*/

    std::multiset<int> set;
    std::multiset<int>::iterator it;
    set.insert(43);
    set.insert(45);
    set.insert(32);

    for(it = set.begin(); it != set.end(); it++)
    {
        std::cout << *it << std::endl;
    }
    std::cout << "Bye" << std::endl;
    return 1;
}
当我创建一个int多集时,一切正常。但是当我注释第二个multiset块并使用第一个块时。我发现以下编译错误:

std::cout << *it << std::endl;no match for 'operator<<' (operand types are'std::ostream {aka std::basic_ostream<char>}' and 'const std::pai<int, float>')
所以我换了

std::cout << *it << std::endl;

并获得以下错误:

‘std::multiset<std::pair<int, float> >::iterator {aka struct std::_Rb_tree_const_iterator<std::pair<int, float> >}’ has no member named ‘first’
我如何解决这个问题,才能访问存储在multiset中的std::pair元素的第一个值?

因为,您基本上是先编写了*it.first。可以使用括号指定希望运算符解析的顺序:

std::cout << (*it).first << std::endl;
因为,你基本上是先写的。可以使用括号指定希望运算符解析的顺序:

std::cout << (*it).first << std::endl;

迭代器的作用类似于指向底层类型(在本例中为成对类型)的指针


这将输出每对的两个成员,即int和float。

迭代器的作用类似于指向基础类型的指针,在本例中是对


这将输出每对的两个成员,即int和float。

*it.first或it->first;它的行为就像一个指针。试试它->第一个,然后再试试它->第二个。那么你是在展示代码,并询问其他问题?发布真实代码。不要让别人编辑你的代码来理解你在说什么。*it.first或it->first;它的行为就像一个指针。试试它->第一个,然后再试试它->第二个。那么你是在展示代码,并询问其他问题?发布真实代码。不要要求人们编辑你的代码来理解你在说什么。
std::cout << it->first << std::endl;
std::cout << it->first << ' ' << it->second << std::endl;