是否可以使用字符串或字符索引数组?

时间:2017-04-23 21:34:57

标签: c++ c arrays

例如,

double myArray[3] = {0.0};

myArray["SSN_1"] = 2.0;
myArray["SSN_2"] = 3.0;
myArray["SSN_3"] = 2.0;

for(... how? ...)
{
... Print ... but, how? ...
}

如果您有任何参考,请链接。

1 个答案:

答案 0 :(得分:2)

不在不可能,只允许整数。

可以使用像

这样的简单结构构建关联容器
struct double_map_item {
    char *key;
    double value;
};

查看bsearch()的手册页示例,了解通过键值查找项目的简单方法。

当然,这是一个非常简单的可能实现,对于更完整和健壮的实现,您应该阅读有关哈希表的内容。

关于this comment,c中字符常量的类型为int,所以

array['x'] = value;

是有效的,但请注意,这不是很有用,因为

  1. 您只能使用一个字符。
  2. 您可能会使用大于所需大小的数组。
  3. 您只有一组非常有限的可能指数。
  4. 注意:关注your own comment,您可能会看到c ++代码。在c ++中,您可以重载[]运算符,以便将const char *作为参数,然后使用哈希表或任何其他方法来查找给定键的匹配元素。

    但在c中,这是不可能的。

    如果要在c ++中实现这样的容器,下面的示例说明如何继续,请注意这只是为了说明基础概念,您应该使用std::map相反,

    #include <iostream>
    #include <map>
    
    class Array {
    public:
        Array();
        double operator[](const char *const key);
        void insert(const char *const key, double value);
    
    private:
        std::map<const char *, double> m_items;
    };
    
    Array::Array()
    {
    }
    
    double
    Array::operator[](const char *const key)
    {
        return m_items[key];
    }
    
    void
    Array::insert(const char *const key, double value)
    {
        m_items.insert(std::pair<const char *, double>(key, value));
    }
    
    int
    main(void)
    {
        Array items;
    
        items.insert("SSN_1", 2.0);
        items.insert("SSN_2", 3.0);
        items.insert("SSN_3", 2.0);
    
        std::cout << items["SSN_1"] << std::endl;
        return 0;
    }