如何从向量中删除唯一值并保留重复

时间:2016-12-01 03:56:46

标签: c++ vector

大家。

我正在尝试从矢量中删除所有唯一值。下面是我的矢量程序输出。我想要保留在矢量中的字符串位于灰色框中。

ART-105-1129 Spring 2004

FILM-298-1129 Spring 2004

GEOG-298-1370 Spring 2004

MUSLT-110-1370 Spring 2004

BCA-298-1617 Spring 2004

HIST-120-1617 Spring 2004

COMM-120-5008 2016年夏季

ANTHR-140-5306 2016年秋季

ENGL-122-5355 2016年秋季

我要保留的代码在第二个“ - ”之后具有匹配的字符串。

我用于上述输出的代码是。

set<string> s(listOfCourses.begin(), listOfCourses.end());
listOfCourses.assign(s.begin(), s.end());

set<string> dupremove(duplicateTermsAndSections.begin(), duplicateTermsAndSections.end());
duplicateTermsAndSections.assign(dupremove.begin(), dupremove.end());

for (vector<string>::iterator itouter = duplicateTermsAndSections.begin(); itouter!= duplicateTermsAndSections.end(); itouter++)   !copyDuplicateTermsAndSections.empty(); copyDuplicateTermsAndSections.pop())
{
  for (vector<string>::iterator it = listOfCourses.begin(); it != listOfCourses.end(); it++)
  {
    if ((*it).find(*itouter) != string::npos)
      cout << *it << endl;
  }
  cout << endl;
}

我想删除没有匹配术语的字符串。匹配的术语类似于下面的2个字符串。它们都有匹配的“-1129 Spring 2004”。

ART-105-1129 2004春季

FILM-298-1129 2004春季

以下是两个不匹配的术语,它们没有相同的子串(如上所述)

ANTHR-140-5306 2016年秋季

ENGL-122-5355 2016年秋季

1 个答案:

答案 0 :(得分:0)

如果你计算一个频率图,其中的键是你的子字符串,你要在第二个&#39; - &#39;之间进行提取。和以下空间。在迭代字符串集合时,请查看地图。如果该键尚未出现在地图中,请在该地图中为该键添加值1。如果键位于地图中,请增加存储在地图中与地图对应的值。

然后,再次遍历字符串集合,如果提取的子字符串在映射中具有相应的值1,则它是唯一的,否则它是重复的。

我将把它作为练习,让您为上述算法使用C ++特定语法。