2012-06-04 78 views
0

我刚刚接触C(不到一周),并试图找出更有效的检索数据的方法。基本上可以想象我有几个股票数据:股票代码,价格,变化。c的股票信息数据结构?

我到目前为止的做法是将所有数据放在3个数组中。如果我想要IBM的价格,我搜索股票代码数组并获取指数位置,然后从价格数组中获取该位置。它工作正常,但因为我做了很多查找,我的数据没有改变,所以我想知道是否有更有效的方法来做到这一点?

我试图寻找一个字典/散列映射可能存储IBM作为一个关键和价格/变化作为值的数组,但我似乎无法弄清楚如何在C中做到这一点。如果它可能是有一个简单的方法来做到这一点?我正在研究一个不同的程序,真的不想学习如何从头开始创建自己的程序(尽管如果我必须这样做,我会确定它会对它起作用)。

+2

您可以使用'struct'来分组相关的信息。当然,有一些公有领域的hashtable代码可以用于查找。 http://stackoverflow.com/questions/1138742/looking-for-a-good-hash-table-implementation-in-c –

+2

你真的应该只是切换到C++。然后你就有了list,map,unordered_map等等。 –

回答

5

试试这个:http://uthash.sourceforge.net/

头版上的例子是相当多的自我解释。

struct Stock { 
    float price, change; 
    char name[3]; 
    UT_hash_handle hh; 
}; 

struct Stock * stocksHash = NULL;  
struct Stock * stockItem; 
HASH_ADD_STR(stocksHash, name, stockItem); 
HASH_FIND_STR(stocksHash, "IBM", stockItem); 

//edit 
void new_stock(struct Stock * stocksHash, char *name, float price, float change) { 
    struct Stock *s; 

    s = malloc(sizeof(struct Stock)); 
    strncpy (s->name, name, 3); 
    s->price = price; s->change = change; 
    s->id = user_id; 
    HASH_ADD_STR(stocksHash, name, s); 
} 

void update_stock (struct Stock * stocksHash, char *name, 
        float price, float change) { 
    struct Stock *s; 
    HASH_FIND_STR (stocksHash, name, s); 
    if (s) { 
     s->price = price; s->change = change; 
    } 
} 
+0

+1。好东西。未来应该有用。 :) – Tudor

+0

非常感谢。我还在学习,每次添加新条目时是否需要malloc,或者如果我想添加ibm和价格/更改,hash_add_str会为我完成这一切吗?上面的命令是否存在? –

+0

@ Error_404我增加了一些例子。是的 - 当你将项目添加到散列时,你必须将'malloc'指定为内存,当你完成时,你需要'free'。 – wroniasty