繁体   English   中英

来自 std::map 的密钥不会传递给 function 参数

[英]key from std::map won't be passed to function parameter

我正在编写 c 函数到 c++ std::map。 其中一个函数 getKey 尝试从 std::map 的 object 中获取某个密钥,并将其传递给参数以供以后使用。

但是在 function 调用之后,参数中没有任何内容。

我不知道为什么。 任何建议将不胜感激。

#include <iostream>
#include <map>
#include <string>

using hashtable_t = std::map<std::string, int64_t>;

hashtable_t* initializeTable()
{
    return new hashtable_t();
}

size_t getTableSize(hashtable_t* table)
{
    return table->size();
}

bool addTableEntry(hashtable_t* table, const char* key, int64_t value)
{
    // std::cout << "key: " << key << " value: " << value << std::endl;
    const auto [iter, success] = table->insert(std::pair(key, value));
    return success;
}

size_t getKey(hashtable_t* table, int64_t seq, char* key)
{
    int64_t i=0;
    for(auto iter=table->begin(); iter!=table->end(); ++iter)
    {
        if (i == seq)
        {
            key = iter->first;
            return iter->first.size();
        }
        ++i;
    }
    return 0;
}

void destroyTable(hashtable_t* table)
{
    delete table;
}

int main()
{
    bool success;
    size_t size;
    int64_t value;
    size_t length;

    hashtable_t* table = initializeTable();

    success = addTableEntry(table, "aaa", 111);
    success = addTableEntry(table, "bbb", 222);
    success = addTableEntry(table, "ccc", 485);


    size = getTableSize(table);
    std::cout << "Size: " << size << std::endl;

    for(int i=0; i<size; ++i)
    {
        char* key = nullptr;
        length = getKey(table, i, key);
        std::cout << "length: " << length << " key: " << key << std::endl;
    }


    destroyTable(table);
    return 0;
}

您的密钥是std::string因此更改getKey以返回std::string

std::string getKey(hashtable_t* table, int64_t seq)
{
    int64_t i=0;
    for(auto iter=table->begin(); iter!=table->end(); ++iter)
    {
        if (i == seq)
        {
            return iter->first;
        }
        ++i;
    }
    return std::string();
}

然后

std::string key = getKey(table, i);

您的代码有一些奇怪的地方。 目前尚不清楚您为什么使用 map,您没有使用它做任何无法使用矢量更有效地完成的事情。 动态分配 map 也是毫无意义的,然后您将其完全删除,就好像它是一个堆栈变量一样。 如果您希望 map 具有堆栈变量的生命周期,那么您应该使用堆栈变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM