C ++ map数组键自动增加

时间:2016-02-22 09:53:09

标签: c++ arrays

在php中,当你想创建数组时,使用它:

$Data[] = "Val1";
$Data[] = "Val1";
$Data[] = "Val1";

php为此数组设置自动键0,1,2。我想知道我应该在地图类型或其他数组类型的c ++中做什么来将int键从0设置为无限制?

在c ++中是这样的:

map<int, string> Data;

Data[0] = "val1";
Data[1] = "val1";
Data[2] = "val1";

我必须自己设置密钥!

有没有办法创建结构或模板并将其与地图一起使用?

4 个答案:

答案 0 :(得分:6)

IIUC,您想使用vector

#include <vector>
#include <string>

...

using namespace std;

...

vector<string> Data;
Data.push_back("val1");
Data.push_back("val1");
Data.push_back("val1");

// Now you can access the inserted elements via Data[i]

请参阅this page上使用此容器的完整示例。

答案 1 :(得分:1)

您可以使用变量:

map<int, string> Data;
int counter = 0;
Data[counter++] = "val1";
Data[counter++] = "val1";
Data[counter++] = "val1";

答案 2 :(得分:1)

如果您正在使用地图,那么您可以在循环中完成您所做的事情以自动生成整数键

<xsl:template match="@*|node()">
    <xsl:choose>
        <xsl:when test="some $i in $temp//@id satisfies $i = ./@id">
            <xsl:apply-templates select="(following-sibling::*)[1]"/>
        </xsl:when>
    </xsl:choose>
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

答案 3 :(得分:1)

您可以制作一个辅助功能模板,如

template <typename T, typename V>
void add_to_map(map<int, T>& Data, const V& val) {
    Data[Data.size()] = val;
}

然后

map<int, string> Data;

add_to_map(Data, "val1");
add_to_map(Data, "val1");
add_to_map(Data, "val1");