Bagaimana cara memeriksa apakah suatu vektor memiliki semua nilai yang sama [duplikat]

Untuk memeriksa apakah suatu vektor memiliki semua nilai yang sama saya biasanya melakukan ini:

std::vector<bool> myVec(3);

if(std::adjacent_find(myVec.begin(), myVec.end(), std::not_equal_to<>()) == myVec.end()){
    // do if every value is the same
}

Bagaimana saya bisa menggunakannya untuk memeriksa apakah suatu vektor memiliki semua nilai yang sama? Ini akan menjadi kasusnya:

 std::vector<std::vector<bool>> my2DVec(3, std::vector<bool>(3));

person akaManen    schedule 04.05.2021    source sumber
comment
Lakukan hal yang sama, tetapi masukkan ke dalam satu lingkaran   -  person NathanOliver    schedule 05.05.2021
comment
@NathanOliver sesuatu seperti std::adjacent_find(myVec[i].begin(), myVec[i].end(), std::not_equal_to‹›()) == myVec[i].end() ? obv di dalam loop yang menambah i dari 0 menjadi 2   -  person akaManen    schedule 05.05.2021
comment
Ya. maka Anda hanya perlu melacak apakah ada yang bernilai false, dan jika ya, keluar dari loop.   -  person NathanOliver    schedule 05.05.2021


Jawaban (1)


Anda dapat mencoba sesuatu seperti:

std::vector<std::vector<bool>> my2DVec(3, std::vector<bool>(3));
bool res = std::all_of(my2DVec.begin(), my2DVec.end, [](auto& myVec){
    return std::adjacent_find(myVec.begin(), myVec.end(), std::not_equal_to<>() == myVec.end();
})

ini harus memeriksa apakah semua elemen di dalam setiap vektor memiliki nilai yang sama, tetapi tidak menjamin bahwa vektor memiliki nilai yang sama

person Alberto Sinigaglia    schedule 04.05.2021
comment
@Blastfurnace maaf, lupa bagian terakhir (btw, saya menggunakan fungsi itu untuk menyimpan sebanyak mungkin kode dari OP) - person Alberto Sinigaglia; 05.05.2021