A look at the digital camera reviews at dpreview.com

// Data source: www.dpreview.com #include <iostream> #include <algorithm> #include <sstream> #include <cstring> #include <vector> using namespace std; double max_elem(vector<double> v) { return *max_element(v.cbegin(), v.cend()); } double median(vector<double> v) { double median; size_t size = v.size(); sort(v.begin(), v.end()); if (size % 2 == 0) { median = (v[size / 2 - 1] + v[size / 2]) / 2; } else { median = v[size / 2]; } return median; } struct camera_review { string name; vector<double> all; camera_review( string n, double build_quality, double ergonomics_handling, double features, double metering_focus_accuracy, double image_quality_raw, double image_quality_jpeg, double low_light_high_iso_performance, double viewfinder_screen_rating, double performance, double movie_video_mode, double connectivity, double value ) { name = n; all = { build_quality, ergonomics_handling, features, metering_focus_accuracy, image_quality_raw, image_quality_jpeg, low_light_high_iso_performance, viewfinder_screen_rating, performance, movie_video_mode, connectivity, value }; }; }; int main() { // If you need normalization, divide each value by 280 vector<camera_review> cameras = { camera_review( "Fujifilm GFX 50S", 252, 220, 220, 220, 266, 232, 251, 200, 170, 140, 160, 120 ), camera_review( "Panasonic Lumix DC-GH5", 248, 248, 256, 206, 214, 181, 160, 236, 243, 272, 180, 220 ), camera_review( "Canon EOS 77D / EOS 9000D", 160, 240, 187, 190, 228, 192, 187, 220, 211, 160, 192, 212 ), camera_review( "Pentax KP", 240, 240, 227, 180, 245, 187, 224, 236, 187, 80, 160, 200 ), camera_review( "Fujifilm X-T20", 232, 232, 207, 200, 234, 214, 218, 220, 209, 180, 160, 220 ), camera_review( "Fujifilm X100F", 232, 232, 213, 210, 239, 214, 213, 260, 187, 80, 160, 200 ), camera_review( "Nikon D5600", 200, 212, 200, 194, 232, 198, 193, 172, 165, 160, 192, 200 ), camera_review( "Leica SL (Typ 601)", 268, 200, 220, 220, 236, 187, 191, 272, 211, 200, 220, 80 ), camera_review( "Sony Alpha a99 II", 220, 208, 260, 210, 258, 231, 249, 240, 222, 200, 220, 180 ), camera_review( "Panasonic Lumix DMC-FZ2500 (Lumix DMC-FZ2000)", 212, 220, 240, 190, 217, 192, 203, 220, 222, 260, 208, 160 ), camera_review( "Canon EOS M5", 220, 232, 213, 210, 226, 192, 171, 220, 187, 180, 180, 180 ), camera_review( "Sony Alpha a6500", 232, 184, 228, 210, 240, 218, 225, 248, 212, 248, 180, 180 ), camera_review( "YI M1", 192, 152, 163, 90, 192, 145, 144, 180, 129, 140, 200, 160 ), camera_review( "Olympus OM-D E-M1 Mark II", 268, 240, 247, 224, 214, 192, 180, 240, 249, 248, 168, 140 ), camera_review( "Panasonic Lumix DMC-LX10 (Lumix DMC-LX15)", 200, 200, 240, 204, 198, 179, 189, 200, 208, 232, 200, 200 ), camera_review( "Pentax K-70", 220, 220, 213, 164, 230, 174, 194, 192, 147, 120, 180, 240 ), camera_review( "Sony Cyber-shot DSC-RX100 V", 208, 160, 265, 222, 200, 189, 209, 240, 252, 272, 200, 140 ), camera_review( "Panasonic Lumix DMC-G85 (Lumix DMC-G80)", 232, 228, 253, 200, 202, 184, 171, 220, 219, 240, 200, 240 ), camera_review( "Fujifilm X-T2", 232, 240, 220, 216, 239, 215, 218, 248, 209, 240, 160, 192 ), camera_review( "Nikon D3400", 140, 180, 163, 190, 230, 200, 196, 172, 197, 200, 160, 172 ), camera_review( "Canon EOS 5D Mark IV", 260, 240, 233, 214, 226, 202, 225, 272, 230, 220, 200, 180 ), camera_review( "Canon EOS M3", 220, 212, 147, 170, 204, 185, 174, 160, 150, 148, 188, 200 ), camera_review( "Fujifilm X-E2S", 200, 220, 167, 180, 206, 203, 169, 220, 160, 60, 200, 200 ), camera_review( "Canon EOS-1D X Mark II", 272, 256, 249, 230, 240, 213, 217, 260, 260, 240, 160, 200 ), camera_review( "Canon PowerShot G7 X Mark II", 220, 240, 192, 200, 197, 183, 191, 220, 190, 220, 200, 180 ), camera_review( "Pentax K-1", 260, 228, 253, 180, 245, 197, 212, 240, 179, 120, 160, 264 ), camera_review( "Canon EOS Rebel T6 (EOS 1300D)", 152, 200, 160, 200, 178, 159, 140, 160, 173, 140, 160, 220 ), camera_review( "Sony Cyber-shot DSC-RX10 III", 220, 160, 240, 202, 221, 200, 211, 200, 201, 260, 208, 120 ), camera_review( "Panasonic Lumix DMC-GX85 (Lumix DMC-GX80 / Lumix DMC-GX7 Mark II)", 212, 208, 248, 210, 200, 186, 169, 180, 219, 240, 200, 240 ), camera_review( "Nikon D5", 272, 260, 247, 246, 218, 224, 255, 272, 242, 180, 160, 200 ), camera_review( "Nikon D500", 260, 260, 240, 230, 243, 204, 228, 260, 230, 192, 160, 248 ), camera_review( "Nikon D810", 240, 240, 207, 220, 251, 212, 227, 240, 212, 140, -1, 220 ), camera_review( "Canon EOS 80D", 220, 240, 228, 180, 231, 192, 196, 240, 200, 228, 180, 192 ), camera_review( "Fujifilm X70", 180, 208, 160, 170, 184, 200, 196, 200, 173, 80, 220, 200 ), camera_review( "Canon XC10", 208, 192, 213, 200, -1, 154, 98, 220, 197, 280, 220, 200 ), camera_review( "Sony Alpha a6300", 232, 160, 227, 210, 240, 218, 225, 248, 212, 260, 180, 200 ), camera_review( "Panasonic Lumix DMC-ZS100 (Lumix DMC-TZ100)", 220, 200, 247, 210, 198, 184, 191, 188, 238, 252, 188, 220 ), camera_review( "Leica Q (Typ 116)", 240, 180, 187, 210, 222, 188, 173, 240, 223, 40, 180, 80 ), camera_review( "Fujifilm X-Pro2", 240, 220, 220, 200, 240, 215, 220, 220, 195, 148, 160, 140 ), camera_review( "Panasonic Lumix DMC-GX8", 240, 220, 240, 210, 204, 176, 176, 240, 219, 240, 200, 200 ), camera_review( "Olympus PEN-F", 232, 232, 240, 210, 214, 184, 189, 220, 185, 172, 180, 120 ), camera_review( "Sony Cyber-shot DSC-RX1R II", 220, 120, 220, 220, 258, 228, 256, 240, 153, 180, 200, 152 ), camera_review( "Canon PowerShot G5 X", 228, 220, 169, 190, 192, 185, 211, 240, 151, 160, 200, 160 ), camera_review( "Sony Alpha 7R II", 192, 160, 260, 240, 261, 230, 256, 252, 167, 248, 200, 200 ), camera_review( "Samsung NX500", 180, 212, 207, 194, 226, 197, 196, 200, 199, 228, 220, 200 ), camera_review( "Sony Cyber-shot DSC-RX10 II", 220, 200, 240, 202, 202, 187, 196, 220, 228, 260, 220, 120 ), camera_review( "Olympus OM-D E-M10 II", 200, 200, 207, 204, 218, 182, 191, 220, 203, 160, 180, 200 ), camera_review( "Olympus Tough TG-4", 240, 200, 200, 200, 240, 160, 160, 160, 220, 160, 200, 200 ), camera_review( "Fujifilm X-T10", 192, 220, 180, 190, 230, 215, 211, 228, 180, 80, 200, 200 ), camera_review( "Sony Cyber-shot DSC-RX100 IV", 220, 208, 249, 216, 198, 186, 207, 240, 233, 260, 220, 140 ), camera_review( "Panasonic Lumix DMC-G7", 160, 192, 213, 200, 190, 181, 189, 208, 203, 248, 208, 232 ), camera_review( "Canon EOS Rebel T6i (EOS 750D / Kiss X8i)", 180, 192, 161, 180, 202, 191, 193, 172, 140, 192, 200, 160 ), camera_review( "Canon EOS Rebel T6s (EOS 760D / EOS 8000D)", 180, 212, 173, 180, 202, 191, 193, 172, 165, 200, 200, 180 ), camera_review( "Nikon D7200", 232, 240, 220, 200, 248, 198, 210, 232, 210, 120, 140, 232 ), camera_review( "Sony SLT-A77 I", 220, 220, 200, 184, 218, 181, 135, 220, 200, 220, 200, 220 ), camera_review( "Samsung NX1", 240, 240, 240, 216, 240, 178, 168, 240, 242, 268, 200, 240 ), camera_review( "Nikon D5500", 200, 212, 193, 194, 228, 220, 193, 172, 165, 200, 180, 200 ), camera_review( "Sony Alpha 7 II", 200, 172, 247, 196, 224, 164, 176, 240, 183, 200, 220, 220 ), camera_review( "Fujifilm X30", 240, 240, 200, 160, 160, 120, 120, -1, 200, 160, 240, 200 ), camera_review( "Fujifilm X100T", 232, 232, 207, 186, 206, 204, 205, 272, 143, 80, 200, 200 ), camera_review( "Olympus OM-D E-M5 II", 240, 200, 247, 204, 207, 180, 185, 240, 187, 200, 180, 160 ), camera_review( "Sony Alpha 7S", 192, 152, 240, 180, 220, 160, 260, 240, 160, 268, 220, 220 ), camera_review( "Samsung Galaxy Camera 2", 120, 140, 220, 160, -1, 127, 120, -1, 190, 140, 220, 160 ), camera_review( "Panasonic Lumix DMC-GM5", 200, 180, 193, 200, 208, 177, 191, 192, 180, 180, 200, 140 ), camera_review( "Nikon D750", 220, 220, 227, 210, 252, 206, 245, 260, 191, 160, 180, 220 ), camera_review( "Panasonic Lumix DMC-LX100", 240, 248, 247, 210, 196, 186, 195, 220, 203, 240, 220, 160 ), camera_review( "Canon PowerShot G7 X", 212, 200, 173, 190, 197, 191, 213, 220, 147, 160, 180, 160 ), camera_review( "Panasonic Lumix DMC-GH4", 232, 240, 240, 200, 221, 195, 196, 240, 183, 268, 180, 200 ), camera_review( "Panasonic Lumix DMC-FZ1000", 188, 220, 213, 210, 206, 187, 203, 220, 227, 252, 200, 160 ), camera_review( "Nikon 1 V3", 208, 200, 213, 204, 182, 173, 127, 192, 223, 160, 180, 80 ), camera_review( "Sony Cyber-shot DSC-RX100 III", 220, 200, 233, 210, 194, 184, 198, 220, 200, 240, 220, 160 ), camera_review( "Sony Alpha a6000", 160, 200, 207, 200, 226, 190, 182, 220, 192, 220, 200, 220 ), camera_review( "Samsung NX30", 192, 196, 193, 180, 209, 179, 178, 192, 173, 180, 200, 180 ), camera_review( "Canon PowerShot G1 X Mark I", 220, 212, 173, 190, 172, 174, 191, 200, 167, 120, 200, 160 ), camera_review( "Nikon D3300", 140, 180, 163, 190, 230, 201, 196, 180, 185, 192, -1, 180 ), camera_review( "Fujifilm X-T1", 232, 232, 220, 210, 230, 215, 215, 240, 197, 92, 180, 212 ), camera_review( "Pentax K-3", 236, 240, 237, 186, 238, 189, 196, 232, 177, 140, -1, 220 ), camera_review( "Olympus OM-D E-M10", 180, 208, 201, 200, 208, 181, 200, 220, 183, 180, 200, 200 ), camera_review( "Nikon D610", 200, 180, 224, 190, 246, 205, 245, 260, 181, 200, -1, 180 ), camera_review( "Fujifilm X-E2", 224, 220, 160, 208, 230, 215, 215, 200, 177, 80, 168, 200 ), camera_review( "Sony Alpha 7R", 188, 160, 227, 210, 250, 190, 211, 240, 153, 240, 240, 240 ), camera_review( "Nikon D5300", 160, 192, 199, 190, 226, 203, 204, 200, 177, 200, 180, 200 ), camera_review( "Sony Alpha 7", 180, 160, 227, 190, 236, 164, 193, 240, 167, 240, 240, 220 ), camera_review( "Panasonic Lumix DMC-GM1", 200, 160, 193, 200, 214, 186, 200, 180, 183, 180, 200, 200 ), camera_review( "Panasonic Lumix DMC-GX7", 200, 188, 216, 194, 208, 194, 191, 180, 170, 216, 180, 220 ), camera_review( "Canon EOS 70D", 200, 240, 224, 170, 225, 185, 196, 240, 177, 220, 180, 240 ), camera_review( "Olympus OM-D E-M1", 232, 240, 227, 200, 221, 197, 200, 240, 183, 200, 180, 160 ), camera_review( "Olympus PEN E-P5", 220, 180, 207, 200, 208, 180, 191, 180, 183, 160, 180, 160 ), camera_review( "Sony Cyber-shot DSC-RX100 II", 220, 200, 207, 210, 194, 181, 202, 200, 173, 220, 220, 160 ), camera_review( "Fujifilm X-M1", 160, 200, 160, 200, 220, 209, 220, 160, 187, 160, 160, 160 ), camera_review( "Pentax Q7", 200, 160, 193, 160, 168, 151, 138, 140, 160, 120, -1, 120 ), camera_review( "Fujifilm X100S", 220, 220, 207, 186, 212, 202, 205, 260, 143, 100, -1, 200 ), camera_review( "Sony Cyber-shot DSC-TX30", 180, 140, 180, 160, 163, 80, 180, 163, 200, 180, -1, 120 ), camera_review( "Canon EOS Rebel SL1 (EOS 100D)", 160, 240, 189, 200, 180, 161, 144, 220, 197, 192, -1, 200 ), camera_review( "Pentax WG-3 GPS", 200, 180, 180, 160, 163, 140, 180, 171, 140, 140, -1, 180 ), camera_review( "Panasonic Lumix DMC-TS5 (Lumix DMC-FT5)", 200, 160, 170, 170, 161, 100, 180, 140, 196, 200, 160, 160 ), camera_review( "Nikon Coolpix AW110", 160, 180, 190, 160, -1, 163, 140, 150, 180, 180, 200, 180 ), camera_review( "Pentax MX-1", 240, 168, 150, 194, 160, 187, 120, 170, 140, 160, -1, 180 ), camera_review( "Olympus Tough TG-2 iHS", 200, 180, 186, 160, -1, 173, 160, -1, 210, 140, -1, 160 ), camera_review( "Ricoh GR", 220, 200, 177, 190, 212, 186, 203, 220, 163, 80, -1, 200 ), camera_review( "Canon PowerShot D20", 180, 200, 160, 160, -1, 165, 180, -1, 178, 120, -1, 160 ), camera_review( "Canon EOS 700D (EOS Rebel T5i / EOS Kiss X7i)", 160, 240, 180, 200, 180, 159, 144, 220, 178, 160, -1, 188 ), camera_review( "Nikon Coolpix A", 220, 160, 147, 200, 212, 187, 203, 200, 155, 80, -1, 120 ), camera_review( "Pentax K-5 IIs", 220, 220, 235, 200, 218, 183, 205, 232, 144, 140, -1, 200 ), camera_review( "Canon PowerShot G15", 260, 220, 180, 200, 150, 183, 200, -1, 200, 120, -1, 120 ), camera_review( "Nikon Coolpix P7700", 220, 200, 200, 170, 155, 198, 170, -1, 120, 180, -1, 140 ), camera_review( "Panasonic Lumix DMC-LX7", 252, 208, 180, 200, 208, 200, 208, -1, 168, 180, -1, 140 ), camera_review( "Pentax K-30", 180, 200, 180, 200, 214, 163, 205, 240, 190, 100, -1, 220 ), camera_review( "Nikon D600", 200, 180, 220, 190, 246, 205, 245, 260, 173, 200, -1, 240 ), camera_review( "Panasonic Lumix DMC-FZ200", 192, 180, 200, 180, 220, 160, 180, -1, 200, 240, -1, 160 ), camera_review( "Panasonic Lumix DMC-LX7", 252, 208, 180, 200, 208, 200, 60, 208, 168, 180, -1, 140 ), camera_review( "Sony SLT-A57", 160, 200, 193, 196, 205, 165, 165, 220, 193, 232, -1, 200 ), camera_review( "Sony Cyber-shot DSC-RX100", 220, 200, 200, 210, 194, 181, 191, 180, 173, 220, -1, 180 ), camera_review( "Canon EOS Rebel T4i (EOS 650D / EOS Kiss X6i)", 160, 240, 180, 200, 190, 161, 158, 220, 177, 160, -1, 200 ), camera_review( "Sony Alpha NEX-F3", 200, 140, 180, 160, 220, 192, 220, 140, 160, 180, -1, 180 ), camera_review( "Samsung NX200", 220, 180, 187, 200, 210, 181, 173, 200, 140, 208, -1, 180 ), camera_review( "Samsung NX210", 220, 180, 200, 200, 210, 181, 173, 200, 167, 208, -1, 180 ), camera_review( "Nikon D3200", 180, 200, 120, 170, 222, 159, 155, 180, 153, 180, -1, 180 ), camera_review( "Sony Cyber-shot DSC-HX20V", 220, 180, 240, 160, 140, 120, 140, -1, 200, 220, -1, 140 ), camera_review( "Nikon Coolpix S9300", 200, 180, 200, 220, 60, 120, 120, -1, 180, 160, -1, 180 ), camera_review( "Fujifilm X10", 260, 220, 210, 200, 120, 202, 120, 220, 180, 60, -1, 120 ), camera_review( "Nikon Coolpix P510", 160, 140, 200, 232, -1, 140, 140, -1, 160, 160, -1, 220 ), camera_review( "Fujifilm X-Pro1", 240, 208, 143, 200, 229, 210, 211, 240, 143, 120, -1, 120 ), camera_review( "Nikon Coolpix P310", 200, 180, 140, 180, 120, 120, 120, -1, 180, 180, -1, 160 ), camera_review( "Nikon D800", 200, 220, 187, 170, 252, 190, 220, 260, 150, 200, -1, 160 ), camera_review( "Canon PowerShot SX260 HS", 240, 180, 180, 220, -1, 180, 160, -1, 140, 160, -1, 180 ), camera_review( "Pentax K-01", 200, 80, 160, 160, 220, 160, 172, 180, 120, 160, -1, 80 ), camera_review( "Canon EOS 5D Mark III", 220, 220, 193, 170, 242, 172, 216, 260, 177, 180, -1, 160 ), camera_review( "Canon PowerShot SX150 IS", 160, 160, 200, 120, 180, 120, -1, 160, 40, 120, -1, 160 ), camera_review( "Sony Cyber-shot DSC-HX200V", 120, 160, 200, 200, -1, 120, 160, -1, 200, 200, -1, 120 ), camera_review( "Olympus OM-D E-M5", 220, 192, 200, 200, 210, 179, 200, 220, 183, 200, -1, 160 ), camera_review( "Panasonic Lumix DMC-ZS20 (Lumix DMC-TZ30)", 200, 140, 240, 180, -1, 180, 120, -1, 180, 220, -1, 160 ), camera_review( "Panasonic Lumix DMC-FZ150", 180, 180, 180, 180, 220, 160, 120, 192, 180, 240, -1, 160 ), camera_review( "Canon PowerShot G1 X", 220, 200, 167, 200, 210, 184, 222, 200, 77, 140, -1, 160 ), camera_review( "Canon IXUS 1100 HS / IXY 50S / Canon ELPH 510 HS / Canon IXUS 1100 HS", 200, 40, 160, 200, -1, 180, 160, -1, 80, 120, -1, 180 ), camera_review( "Panasonic Lumix DMC-GX1", 232, 212, 160, 200, 188, 171, 191, 188, 185, 200, -1, 160 ), camera_review( "Sony Alpha NEX-7", 208, 200, 195, 190, 232, 182, 202, 220, 177, 240, -1, 160 ), camera_review( "Sony SLT-A65", 160, 192, 193, 180, 234, 176, 144, 220, 190, 220, -1, 200 ), camera_review( "Sony SLT-A77", 220, 200, 220, 180, 234, 176, 144, 240, 207, 220, -1, 200 ), camera_review( "Sony Alpha NEX-5N", 200, 180, 173, 190, 218, 178, 231, 200, 177, 220, -1, 200 ), camera_review( "Sony SLT-A35", 180, 180, 173, 160, 190, 154, 171, 180, 163, 160, -1, 180 ), camera_review( "Panasonic Lumix DMC-FH7 (Lumix DMC-FS22 / Lumix DMC-FS22)", 140, 120, 110, 140, -1, 130, 110, -1, 120, 80, -1, 200 ), camera_review( "Sony Alpha NEX-C3", 180, 160, 160, 190, 214, 173, 211, 160, 153, 160, -1, 160 ), camera_review( "Olympus PEN E-P3", 200, 200, 127, 200, 192, 166, 144, 220, 127, 192, -1, 120 ) }; vector<string> names; vector<double> build_qualities, ergonomics_handlings, features, metering_focus_accuracies, image_qualities_raw, image_qualities_jpeg, low_light_high_iso_performances, viewfinder_screen_ratings, performances, movie_video_modes, connectivities, values; double highest_median_score = 0; string highest_median_score_camera; cout << "Total number of cameras considered: " << cameras.size() << endl; for(const camera_review& c : cameras) { names.push_back(c.name); build_qualities.push_back(c.all[0]); ergonomics_handlings.push_back(c.all[1]); features.push_back(c.all[2]); metering_focus_accuracies.push_back(c.all[3]); image_qualities_raw.push_back(c.all[4]); image_qualities_jpeg.push_back(c.all[5]); low_light_high_iso_performances.push_back(c.all[6]); viewfinder_screen_ratings.push_back(c.all[7]); performances.push_back(c.all[8]); movie_video_modes.push_back(c.all[9]); connectivities.push_back(c.all[10]); values.push_back(c.all[11]); double med = median(c.all); if(med > highest_median_score) { highest_median_score_camera = c.name; highest_median_score = med; } } vector<double> best_in_categories = { max_elem(build_qualities), max_elem(ergonomics_handlings), max_elem(features), max_elem(metering_focus_accuracies), max_elem(image_qualities_raw), max_elem(image_qualities_jpeg), max_elem(low_light_high_iso_performances), max_elem(viewfinder_screen_ratings), max_elem(performances), max_elem(movie_video_modes), max_elem(connectivities), max_elem(values) }; vector<string> categories = {"Build quality", "Ergonomics / handling", "Features", "Metering / focus accuracy", "Image quality (RAW)", "Image quality (JPEG)", "Low light / high ISO performance", "Viewfinder / screen", "Performance / speed", "Movie / video mode", "Connectivity", "Value"}; size_t categories_size = categories.size(); stringstream ss; cout << "Best cameras in each category: " << endl; cout << "==============================" << endl; for(size_t i = 0; i < categories_size; i++) { ss.str(""); cout << categories[i] << ": "; for(const camera_review& c : cameras) { if(c.all[i] == best_in_categories[i]) { ss << ", " << c.name; } } cout << ss.str().erase(0,2) << endl; } cout << endl << "Camera with highest median score: " << highest_median_score_camera << endl; return 0; } /* Total number of cameras considered: 144 Best cameras in each category: ============================== Build quality: Canon EOS-1D X Mark II, Nikon D5 Ergonomics / handling: Nikon D5, Nikon D500 Features: Sony Cyber-shot DSC-RX100 V Metering / focus accuracy: Nikon D5 Image quality (RAW): Fujifilm GFX 50S Image quality (JPEG): Fujifilm GFX 50S Low light / high ISO performance: Sony Alpha 7S Viewfinder / screen: Leica SL (Typ 601), Canon EOS 5D Mark IV, Nikon D5, Fujifilm X100T Performance / speed: Canon EOS-1D X Mark II Movie / video mode: Canon XC10 Connectivity: Fujifilm X30, Sony Alpha 7R, Sony Alpha 7 Value: Pentax K-1 Camera with highest median score: Nikon D5 */