首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输出对象中的唯一字符数

输出对象中的唯一字符数
EN

Stack Overflow用户
提问于 2015-01-15 16:48:14
回答 2查看 536关注 0票数 0

我需要调用该方法从person对象返回一个人访问过的城市的列表,然后遍历该列表并逐个打印出来(我已经这样做了)。现在,我必须打印出那个人访问过的独特城市的数量,但不知道如何访问。我如何简单地做到这一点(我只在一个理工科年级)?到目前为止,我已经有了这个。

代码语言:javascript
复制
Person *person1 = new Person(listOfCities);

for (int i = 1; i <= 5; i++)
{
    cout << "Please enter name of city: ";
    cin >> cityName; 

    cout << "Please enter size of city: "; 
    cin >> citySize; 

    cout << "Please enter postal code of city: "; 
    cin >> postalCode; 

    cout << " " << endl;

    City myCity(cityName, citySize, postalCode); 

    person1->addCity(myCity);
}

for (int k = 0; k < person1->returnListOfCities().size(); k++) 
{
    cout << person1->returnListOfCities()[k].toString() << endl; 
}

toString()方法显示城市的名称、大小和邮政编码。listOfCities存储在一个向量中。

EN

回答 2

Stack Overflow用户

发布于 2015-01-15 17:12:32

假设cities是一个std::string,您可以从以下代码片段中获取指导原则:

代码语言:javascript
复制
#include <string>
#include <set>
#include <iostream>

using std::set;
using std::string;
using std::cout;
using std::cin;

int main()
{
    string s;
    set<string> cities;
    char response = 'y';
    while (response == 'y')
    {
        cout << "Enter name of city:\t";
        cin >> s;
        cities.insert(s);
        cout << "Continue (y/n): ";
        cin >> response;
    }
    cout << "Total cities travelled:\t" << cities.size();
}

我使用了一个名为'set‘的容器来存储访问过的城市。足够给你点子了。

有关set的更多信息,请单击此处:http://www.cplusplus.com/reference/set/set/

只是忘了补充:它区分大小写,所以多伦多和多伦多将被区别对待。

票数 0
EN

Stack Overflow用户

发布于 2015-01-15 17:34:47

我假设你被std::vector卡住了,不能使用std::set。打印以下矢量中唯一元素的示例

代码语言:javascript
复制
#include <vector>
#include <iostream>
#include <algorithm>

int main()
{
    std::vector<int> v = { 1, 4, 1, 1, 2 };

    //std::unique works with sorted array only 
    std::sort( v.begin(), v.end() );

    //size of vector is not modified. But duplicate elements are overwritten with non duplicates
    // { 1, 2, 4, ?, ? }
    std::vector< int >::iterator endLocation;
    endLocation = std::unique( v.begin(), v.end() );

    //print unique elements
    std::ostream_iterator< int > output( std::cout, " " );
    std::copy( v.begin(), endLocation, output );

    return 0;
}

注1: std::unique会改变现有数组。因此,如果必须再次使用向量,则创建一个副本

注2:这涉及到单独在O( n log n )工作的std::vector的排序。如果std::vector中的元素数量很大,它可能会更好地创建只维护唯一元素的std::set,并且它的插入复杂度对于std::set中使用的散列算法是O( log n )。但这将创建所有唯一元素的副本(更多空间限制)。它将如下所示。

代码语言:javascript
复制
std::set<int> uniqueElements( v.begin(), v.end() );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27959630

复制
相关文章

相似问题

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