我正在尝试重载下标运算符 - 我知道它是元素访问运算符 - 以获取 char * 或 std::string。
我有一个结构
struct foo
{
int Age;
const char *Name;
};
和一个 std::vector 将持有该结构的多个实例。
std::vector<foo>bar;
我的目标是能够通过调用名字来访问 bar 中的每个 foo。
std::cout<<"Simon's age is: "<<bar["simon"];
我已经在 google 上搜索了很长时间,试图找到一个例子或一些可以解决的问题,但没有成功。
我觉得这行得通
foo operator[](char *Name)
{
for(int i=0;i<bar.size();i++)
{
if(bar[i].Name == Name){return bar[i];}
}
}
但是显然我做错了什么
我知道这可以用 std::map 来完成,但我宁愿使用 std::vector,谢谢。
无论您选择提供何种帮助,我都将不胜感激。谢谢。
最佳答案
做你想做的事需要从 std::vector 继承。否则你不能重载它的方法。
类似于以下内容(未经测试)。
struct fooVector : public std::vector<foo> {
typedef std::vector<foo> super;
using super::size;
...
foo& operator[](char const* Name) {
super& self=*this;
for(int i=0;i<size();i++)
{
if( ! strcmp( self[i].Name, Name) ){return self[i];}
}
// Need to do something reasonable if not found
}
};
关于c++ - 重载 vector 下标运算符取一个 char * 或 string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31675907/