【问题标题】:Is it possible to index arrays using strings or characters? [duplicate]是否可以使用字符串或字符来索引数组? [复制]
【发布时间】:2017-04-23 21:34:57
【问题描述】:

例如,

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? ...
}

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

【问题讨论】:

  • 不,不是......
  • 有了 4k 代表,我原以为基本搜索会成为您的第一个停靠点。

标签: c++ c arrays


【解决方案1】:

不在 中是不可能的,只允许使用整数。

关联容器可以用一个简单的结构来构建,比如

struct double_map_item {
    char *key;
    double value;
};

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

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

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

array['x'] = value;

是有效的,但请注意,这并不是真正有用,因为,

  1. 您只能使用单个字符。
  2. 您可能会使用比所需大小更大的数组。
  3. 您只有非常有限的一组可能的索引。

注意:在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;
}

【讨论】:

  • 字符是整数类型,因此它们可以用作索引(尽管在大多数情况下不是很有用)。
  • 我想我在某个地方看到过,可能是在字符串搜索算法实现中。
  • 但不是 c、c++,因为您可以重载 [] 运算符。
  • @IharobAlAsimi,哦,我明白了。可以举个例子吗?
  • @anonymous 抱歉,我对 c++ 不是很好,每当我尝试实现这种运算符重载时,我总是卡住并遇到麻烦,这就是我不喜欢 c++ 的原因之一,因为要真正掌握它是不可能的。
猜你喜欢
  • 1970-01-01
  • 2016-02-09
  • 2011-08-25
  • 2014-05-08
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多