![](/img/trans.png)
[英]std::size() from iterator library won't work on C-style array passed to 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.