c++ - 重载 vector 下标运算符取一个 char * 或 string

标签 c++ operator-overloading stdvector

我正在尝试重载下标运算符 - 我知道它是元素访问运算符 - 以获取 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/

相关文章:

c++ - 如何从 C++ 中的 istream 中干净地提取字符串分隔字符串

c++ - 将流运算符与模板类一起使用

c++ - 为什么编译器会跳过 for 循环?

c++ - 在 C++ 中,如何声明一个将任何对象的 vector 数组作为参数的函数?

c++ - 编辑 QDomElement 的值?

c++ - 我对 enable_if 和 has_member 做错了什么?

c++ - 为堆栈重载比较运算符

c++ - 为类重载 = 运算符

c++ - 派生类中的 operator<< 可以在 C++ 的基类中调用另一个 operator<< 吗?

c++ - vector::push_back 什么时候增加容量?