将数据存储到地图

时间:2017-03-20 07:39:07

标签: c++

我创建了一个地图,其中wstring作为数据结构的键,但是当我尝试运行迭代器来显示地图数据时,它会跳过我添加的第一个数据。这是代码。

typedef struct
{
public:
wstring source;
wstring synthetic;
int operation;
int divisor;
}SSParams;

map<wstring, SSParams>SSParameters;

for(int x=0;x<sizeofdata;x++)
{
 SSParameters[srcsymbol[x]].source = srcsymbol[x];
 SSParameters[srcsymbol[x]].synthetic = synsymbol[x];
 SSParameters[srcsymbol[x]].operation = operation[x];
 SSParameters[srcsymbol[x]].divisor = divisor[x];
 m_api->LoggerOut(Log, L"Source: %s Synth: %s, Operation: %d, Value: %d, Total: %d", SSParameters[srcsymbol].source, SSParameters[srcsymbol].synthetic, SSParameters[srcsymbol].operation, SSParameters[srcsymbol].divisor,SSParameters.size());
}

map<wstring, SSParams>::iterator iter;
for (iter = SSParameters.begin(); iter != SSParameters.end(); ++iter)
{
    m_api->LoggerOut(Log, L"Data Source: %s, Synth: %s, Operation: %d, Divisor: %d", iter->second.source, iter->second.synthetic, iter->second.operation, iter->second.divisor);
}

输出(插入循环):

Source: HCBC Synth: HCBCx, Operation:1, Value: 100, Total: 1
Source: HCBC Synth: HCBCv, Operation:1, Value: 100, Total: 1

输出(迭代器循环):

Data Source: HCBC Synth: HCBCv, Operation:1, Value: 100

正如你所看到的,我使用for循环添加了值以及地图的键,日志显示我成功添加了数据但是当我尝试运行迭代器时,我显示数据但跳过第一个

3 个答案:

答案 0 :(得分:1)

由于srcsymbol在循环中没有改变,你只需添加一个元素然后不断覆盖其内容。最终结果;地图只包含一个元素。

答案 1 :(得分:1)

您可以使用以下方法测试插入的键是唯一的:

for(int x=0;x<sizeofdata;x++)
{
    assert(SSParameters.count(srcsymbol[x])==0);
    SSParameters[srcsymbol[x]].source = srcsymbol[x];

需要<cassert>

答案 2 :(得分:0)

从插入循环的输出,srcsymbol [x]始终等于HCBC。因此,程序只在地图中添加了一个元素。