识别结构C ++中的唯一元素

时间:2019-06-11 15:35:12

标签: c++ struct

我有一个结构,其中包含有关几何图形的信息。我的问题是,我不知道要显示唯一的图形的体积(这意味着另一个图形没有相同的体积)。如果有人知道,请帮助我。

struct Sfere
    {
      char codsf[5];
      char colour[15];
      char material[15];
      float r,area,volume;
    } sf[100]

1 个答案:

答案 0 :(得分:0)

sf[i].volume访问结构数组中第i个元素的体积字段

要使算法查找体积的唯一值,它取决于您的数据集。

最通用的方法是使用'volume'作为键对数组进行排序。以这种方式对数组进行排序时,只需忽略相同值的连续条目,就很容易计算唯一条目。

示例:

'1 6 7 2 7 9 7'变为'1 2 6 7 7 7 9',则您删除了相同值的连续条目,或者忽略了'1 2 6 7 9'。并且您具有唯一卷条目的列表。

更新:

@Max Langhof建议使用std :: unique更干净。您只需要使用std :: vector来具有迭代器和lambda即可指定要处理的字段。


 #include <iostream>
#include <algorithm>
#include <vector>
#include <string>

int main()
{
    typedef struct _Sfere
    {
        char codsf[5];
        char colour[15];
        char material[15];
        float r,area,volume;
    } Sfere;

    //Encapsulate structure in a standard vector to have iterators
    std::vector<Sfere> my_sfere_vector(10);
    //Insert unique elements
    my_sfere_vector[1].volume = 1.0;
    my_sfere_vector[7].volume = 3.0;
    //Show content
    for (std::vector<Sfere>::iterator my_element = my_sfere_vector.begin();my_element != my_sfere_vector.end();my_element++)
    {
        std::cout << " " << my_element->volume;
    }
    std::cout << "\n";
    //Sort the vector
    std::sort
    (
        my_sfere_vector.begin(),
        my_sfere_vector.end(),
        [](const Sfere &a, const Sfere &b)
        {
            return a.volume < b.volume;
        }
    );
    //Unique elements
    std::vector<Sfere>::iterator last = std::unique
    (
        my_sfere_vector.begin(),
        my_sfere_vector.end(),
        [](const Sfere &a, const Sfere &b)
        {
            return a.volume == b.volume;
        }
    );
    //Prune out excess elements
    my_sfere_vector.erase(last, my_sfere_vector.end());
    //Show content
    for (std::vector<Sfere>::iterator my_element = my_sfere_vector.begin();my_element != my_sfere_vector.end();my_element++)
    {
        std::cout << " " << my_element->volume;
    }
    std::cout << "\n";
}

这是结果


     0 1 0 0 0 0 0 3 0 0
     0 1 3

    Process returned 0 (0x0)   execution time : 0.015 s
    Press any key to continue.