首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用C++获取列的非重复计数

如何使用C++获取列的非重复计数
EN

Stack Overflow用户
提问于 2012-11-25 08:11:36
回答 3查看 143关注 0票数 0

我想得到一个大型数据文件的列的不同计数使用C.How,我可以做me.Thanks.My样本数据文件如下。

对于第二个属性,不同的计数是6。

代码语言:javascript
复制
399547,v4149,p3178,1990,2065,fraud
399940,v5852,p3194,8278,2180,fraud
399983,v3476,p3199,766,1125,fraud
400206,v3467,p3216,494,311000,fraud
400345,v4497,p3219,1211,432100,fraud
400471,v3473,p3225,41392,3710,fraud
400498,v3476,p3225,102,23820,fraud
401325,v4497,p3297,1322,1110,fraud
EN

回答 3

Stack Overflow用户

发布于 2012-11-25 08:46:49

为每一列创建一个搜索树。假设您在一个文件中有10行,nth列的两个不同的值。34563457nth列的搜索树将如下所示:

你最终会得到6个搜索树。读完整个文件后,遍历每个搜索树中的所有可能路径,这将给出不同值的数量。

票数 2
EN

Stack Overflow用户

发布于 2012-11-25 08:33:35

读取并拆分每一行。

  • 将第二个属性放入array.

  • qsort

现在,您有了一个彼此相邻的具有相等字符串的数组。您可以遍历数组并计算不同的条目。

如果条目的长度都是5个字符,则必须为每个属性使用malloc()内存。

代码语言:javascript
复制
char (*array)[6];
int i;
int n; /* number of lines read */
int distinct = 1;
/* read the data file and put it into array */
/* qsort() array */
for (i = 1; i < n; ++i) {
    if (strcmp(array[i], array[i - 1]) != 0)
        ++distinct;
}

printf("There are %d distinct rows\n", distinct);
票数 1
EN

Stack Overflow用户

发布于 2012-11-25 08:16:08

您可以使用std::map<std::string,int> -它将保存键值对,其中key是vNNNN,value是重复次数。

第一次循环将扫描输入文件并填充此映射,然后映射中的键数将是不同的计数。

编辑:如果您不能使用C++而需要C语言,那么您必须找到一些用于C语言的哈希映射库,比如sparsehash

如果数据量真的、真的很大,就有可能无法放入内存。在这种情况下,我建议使用SQLite临时数据库来解析、存储和索引您的数据,然后对其使用标准SELECT DISTINCT

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13546998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档