gpt4 book ai didi

c++ - 在 map 容器中使用映射值重载 << 运算符

转载 作者:太空狗 更新时间:2023-10-29 21:26:54 24 4
gpt4 key购买 nike

我在使用 map 中的映射值时遇到重载运算符<<的问题:

map<string,abs*> _map;
// that my declaration, and I have filled it with keys/values

这两种我都试过了:

std::ostream& operator<<(std::ostream& os, abs*& ab) 
{
std::cout << 12345 << std::endl;
}

std::ostream& operator<<(std::ostream& os, abs* ab)
{
std::cout << 12345 << std::endl;
}

在我的程序中,我只需调用:

std::cout << _map["key"] << std::endl; 
// trying to call overloaded operator for mapped value
// instead it always prints the address of the mapped value to screen

我也试过:

std::cout << *_map["key"] << std::endl; 
// trying to call overloaded operator for mapped value
// And that gives me a really long compile time error

任何人都知道我可以改变什么来让它输出映射值的值,而不是地址?

感谢任何帮助

最佳答案

不要将 abs 用作类型 - abs 是在 cstdlib header 中声明的函数。您没有提供该类型的声明,因此此示例使用了一些虚构的 Abs 类型:

#include <map>
#include <string>
#include <iostream>

struct Abs
{
Abs(int n) : n_(n){}
int n_;
};

std::ostream& operator<<(std::ostream& os, const Abs* p)
{
os << (*p).n_;
return os;
}

int main(int argc, char** argv)
{
std::map<std::string, Abs*> map_;
Abs a1(1);
Abs a2(2);

map_["1"] = &Abs(1);
map_["2"] = &Abs(2);
std::cout << map_["1"] << ", " << map_["2"] << std::endl;
}

输出:

 1, 2

关于c++ - 在 map 容器中使用映射值重载 << 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10353026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com